home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / abreed3.lha / anims < prev    next >
Text File  |  1995-09-14  |  51KB  |  3,580 lines

  1. Flash:
  2.  
  3. ; D0=number of a zone, D1=brightness change
  4.  
  5.  cmp.w #-20,d1
  6.  bgt.s .okflash
  7.  move.w #-20,d1
  8. .okflash:
  9.  
  10.  movem.l d0/a0/a1,-(a7)
  11.  
  12.  move.l #CurrentPointBrights,a1
  13.  
  14.  move.l ZoneAdds,a0
  15.  move.l (a0,d0.w*4),a0
  16.  add.l LEVELDATA,a0
  17.  
  18.  move.l a0,-(a7)
  19.  
  20.  add.w ToZonePts(a0),a0
  21. flashpts:
  22.  move.w (a0)+,d2
  23.  blt.s flashedall
  24.  add.w d1,(a1,d2.w*4)
  25.  add.w d1,2(a1,d2.w*4)
  26.  bra flashpts
  27.  
  28. flashedall:
  29.  
  30.  move.l (a7)+,a0
  31.  
  32.  move.l #ZoneBrightTable,a1
  33.  add.w d1,(a1,d0.w*4)
  34.  add.w d1,2(a1,d0.w*4)
  35.  
  36.  add.l #ToListOfGraph,a0
  37.  
  38. doemall:
  39.  move.w (a0),d0
  40.  blt.s doneemall
  41.  add.w d1,(a1,d0.w*4)
  42.  add.w d1,2(a1,d0.w*4)
  43.  addq #8,a0
  44.  bra.s doemall
  45.  
  46. doneemall:
  47.  movem.l (a7)+,d0/a0/a1
  48.  
  49.  rts
  50.  
  51. prot2: dc.w 0
  52.  
  53. radius: dc.w 0
  54.  
  55. ExplodeIntoBits:
  56.  
  57.  move.w d3,radius
  58.  
  59.  cmp.w #7,d2
  60.  ble.s .oksplut
  61.  move.w #7,d2
  62. .oksplut:
  63.  
  64.  move.l NastyShotData,a5
  65.  move.w #19,d1
  66. .findeight
  67.  move.w 12(a5),d0
  68.  blt.s .gotonehere
  69.  adda.w #64,a5
  70.  dbra d1,.findeight
  71.  rts
  72.  
  73. .gotonehere
  74.  
  75.  move.b #0,damagetaken(a5)
  76.  move.b #0,numlives(a5)
  77.  
  78.  move.l ObjectPoints,a2
  79.  move.w (a5),d3
  80.  lea (a2,d3.w*8),a2
  81. ; jsr GetRand
  82. ; lsr.w #4,d0
  83. ; move.w radius,d1
  84. ; and.w d1,d0
  85. ; asr.w #1,d1
  86. ; sub.w d1,d0
  87.  move.w newx,d0
  88.  move.w d0,(a2)
  89. ; jsr GetRand
  90. ; lsr.w #4,d0
  91. ; move.w radius,d1
  92. ; and.w d1,d0
  93. ; asr.w #1,d1
  94. ; sub.w d1,d0
  95.  move.w newz,d0
  96.  move.w d0,4(a2)
  97.  
  98.  jsr GetRand
  99.  and.w #8190,d0
  100.  move.l #SineTable,a2
  101.  adda.w d0,a2
  102.  move.w (a2),d3
  103.  move.w 2048(a2),d4
  104.  Jsr GetRand
  105.  and.w #3,d0
  106.  add.w #1,d0
  107.  ext.l d3
  108.  ext.l d4
  109.  asl.l d0,d3
  110.  asl.l d0,d4
  111.  move.l ImpactX(a0),d0
  112.  swap d4
  113.  asr.w #1,d0
  114.  add.w d0,d4
  115.  swap d0
  116.  move.w d4,shotzvel(a5)
  117.  swap d3
  118.  asr.w #1,d0
  119.  add.w d0,d3
  120.  move.w d3,shotxvel(a5)
  121.  jsr GetRand
  122.  and.w #1023,d0
  123.  add.w #2*128,d0
  124.  neg.w d0
  125.  move.w d0,shotyvel(a5)
  126.  move.l #0,EnemyFlags(a5)
  127.  move.w 12(a0),12(a5)
  128.  
  129. ; jsr GetRand
  130. ; lsr.w #4,d0
  131. ; move.w radius,d1
  132. ; and.w d1,d0
  133. ; asr.w #1,d1
  134. ; sub.w d1,d0
  135.  move.w 4(a0),d0
  136.  add.w #6,d0
  137.  ext.l d0
  138.  asl.l #7,d0
  139.  
  140.  move.l d0,accypos(a5)
  141.  move.w d2,d0
  142.  and.w #3,d0
  143.  add.w #50,d0
  144.  move.b d0,shotsize(a5)
  145.  move.w #40,shotgrav(a5)
  146.  move.w #0,shotflags(a5)
  147.  move.w #-1,shotlife(a5)
  148.  move.b #2,16(a5)
  149.  clr.b shotstatus(a5)
  150.  move.b ObjInTop(a0),ObjInTop(a5)
  151.  st worry(a0)
  152.  adda.w #64,a5
  153.  sub.w #1,d2
  154.  blt.s .gotemall
  155.  dbra d1,.findeight
  156.  
  157. .gotemall
  158.  
  159.  rts
  160.  
  161. brightanim:
  162.  
  163.  move.l #BrightAnimTable,a1
  164.  move.l #BrightAnimPtrs,a3
  165.  move.l #BrightAnimStarts,a4
  166. dobrightanims
  167.  move.l (a3),d0
  168.  blt nomoreanims
  169.  move.l d0,a2
  170.  move.w (a2)+,d0
  171.  cmp.w #999,d0
  172.  bne.s itsabright
  173.  move.l (a4),a2
  174.  move.w (a2)+,d0
  175. itsabright:
  176.  move.l a2,(a3)+
  177.  addq #4,a4
  178.  move.w d0,(a1)+
  179.  bra.s dobrightanims
  180.  
  181. nomoreanims:
  182.  rts
  183.  
  184. BrightAnimTable: ds.w 20
  185. BrightAnimPtrs:
  186.  dc.l PulseANIM
  187.  dc.l FlickerANIM
  188.  dc.l FireFlickerANIM
  189.  dc.l -1
  190.  
  191. BrightAnimStarts:
  192.  dc.l PulseANIM
  193.  dc.l FlickerANIM
  194.  dc.l FireFlickerANIM
  195.  
  196. PulseANIM:
  197.  dc.w -10,-10,-9,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10
  198.  dc.w 10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9
  199.  dc.w 999
  200.  
  201. FlickerANIM:
  202.  dcb.w 20,10
  203.  dc.w -10
  204.  dcb.w 30,10
  205.  dc.w -10
  206.  dcb.w 5,10
  207.  dc.w -10
  208.  dc.w 999
  209.  
  210. FireFlickerANIM:
  211.  dc.w -10,-9,-6,-10,-6,-5,-5,-7,-5,-10,-9,-8,-7,-5,-5,-5,-5
  212.  dc.w -5,-5,-5,-5,-6,-7,-8,-9,-5,-10,-9,-10,-6,-5,-5,-5,-5,-5
  213.  dc.w -5,-5
  214.  dc.w 999
  215.  
  216. realtab:
  217.  dc.l prot1-78935450
  218.  dc.l prot2-78935450
  219.  dc.l prot3-78935450
  220.  dc.l prot4-78935450
  221.  dc.l prot5-78935450
  222.  dc.l prot6-78935450
  223.  dc.l prot7-78935450
  224.  dc.l prot8-78935450
  225.  dc.l prot9-78935450
  226.  dc.l protA-78935450
  227.  
  228. objvels: ds.l 8
  229.  
  230. FramesToDraw: dc.w 0
  231. TempFrames: dc.w 0
  232.  
  233. objmoveanim:
  234.  
  235.  move.l PLR1_Roompt,a0
  236.  move.w (a0),PLR1_Zone
  237.  move.l PLR2_Roompt,a0
  238.  move.w (a0),PLR2_Zone
  239.  
  240.  bsr Player1Shot
  241.  bsr Player2Shot
  242.  bsr SwitchRoutine
  243.  bsr DoorRoutine
  244.  bsr LiftRoutine
  245.  bsr ObjectHandler
  246.  bsr brightanim
  247.  
  248.  subq.w #1,animtimer
  249.  bgt.s notzero
  250.  move.w #2,animtimer
  251.  move.l otherrip,d0
  252.  move.l RipTear,otherrip
  253.  move.l d0,RipTear
  254. notzero:
  255.  
  256.  rts
  257.  
  258. ******************************
  259.  
  260. tstdir: dc.w 0
  261.  
  262. liftheighttab: ds.w 40
  263. doorheighttab: ds.w 40
  264. PLR1_stoodonlift: dc.b 0
  265. PLR2_stoodonlift: dc.b 0
  266. liftattop: dc.b 0
  267. liftatbot: dc.b 0
  268. ZoneBrightTable:
  269.  ds.l 300
  270.  
  271. DoWaterAnims:
  272.  
  273.  move.w #20,d0
  274. wateranimlop:
  275.  move.l (a0)+,d1
  276.  move.l (a0)+,d2
  277.  move.l (a0),d3
  278.  move.w 4(a0),d4
  279.  move.w d4,d5
  280.  muls TempFrames,d5
  281.  add.l d5,d3
  282.  cmp.l d1,d3
  283.  bgt.s waternotattop
  284.  
  285.  move.l d1,d3
  286.  move.w #128,d4
  287.  bra waterdone
  288.  
  289. waternotattop:
  290.  
  291.  cmp.l d2,d3
  292.  blt.s waterdone
  293.  
  294.  move.l d2,d3
  295.  move.w #-128,d4
  296.  
  297. waterdone:
  298.  
  299.  move.l d3,(a0)+
  300.  move.w d4,(a0)+
  301.  move.l d3,d1
  302. morezones:
  303.  move.w (a0)+,d2
  304.  bge.s okzone
  305.  
  306.  
  307.  dbra d0,wateranimlop
  308.  rts
  309.  
  310. okzone:
  311.  
  312.  move.l (a0)+,a1
  313.  add.l LEVELGRAPHICS,a1
  314.  move.l d1,d3
  315.  asr.l #6,d3
  316.  move.w d3,2(a1)
  317.  move.l ZoneAdds,a1
  318.  move.l (a1,d2.w*4),a1
  319.  add.l LEVELDATA,a1
  320.  move.l d1,ToZoneWater(a1)
  321.  
  322.  bra.s morezones
  323.  
  324.  rts
  325.  
  326.  even
  327. LiftRoutine:
  328.  
  329.  move.l LiftData,a0
  330.  move.l #liftheighttab,a6
  331.  
  332. doalift:
  333.  
  334.  move.w (a0)+,d0    ; bottom of lift movement
  335.  cmp.w #999,d0
  336.  bne notallliftsdone
  337.  move.w #999,(a6)
  338.  
  339.  bsr DoWaterAnims
  340.  
  341.  rts
  342.  
  343. notallliftsdone:
  344.  move.w (a0)+,d1    ; top of lift movement.
  345.  
  346.  move.w (a0),d3
  347.  move.w d3,(a6)+
  348.  move.w 2(a0),d2
  349.  move.w d2,d7
  350.  muls TempFrames,d2
  351.  add.w d2,d3
  352.  move.w 2(a0),d2
  353.  cmp.w d3,d0
  354.  sle.s liftatbot
  355.  bgt.s .nolower
  356.  moveq #0,d2
  357.  move.w d0,d3
  358. .nolower:
  359.  
  360.  cmp.w d3,d1
  361.  sge.s liftattop
  362.  blt.s .noraise
  363.  moveq #0,d2
  364.  move.w d1,d3
  365. .noraise:
  366.  
  367.  sub.w d3,d0
  368.  cmp.w #15*16,d0
  369.  slt d6
  370.  
  371.  move.w d3,(a0)+
  372.  move.l a0,a5
  373.  move.w d2,(a0)+
  374.  move.w d2,d7
  375.  
  376.  move.l (a0)+,a1
  377.  add.l LEVELGRAPHICS,a1
  378.  asr.w #2,d3
  379.  move.w d3,d0
  380.  asl.w #2,d0
  381.  move.w d0,2(a1)
  382.  move.w d3,d0
  383.  muls #256,d3
  384.  move.w (a0)+,d5
  385.  move.l ZoneAdds,a1
  386.  move.l (a1,d5.w*4),a1
  387.  add.l LEVELDATA,a1
  388.  move.w (a1),d5
  389.  move.l PLR1_Roompt,a3
  390.  move.l d3,2(a1)
  391.  neg.w d0
  392.  
  393.  cmp.w (a3),d5
  394.  seq.s PLR1_stoodonlift
  395.  move.l PLR2_Roompt,a3
  396.  cmp.w (a3),d5
  397.  seq.s PLR2_stoodonlift
  398.  
  399.  move.w (a0)+,d2    ; conditions
  400.  and.w Conditions,d2
  401.  cmp.w -2(a0),d2
  402.  beq.s .satisfied 
  403.  
  404.  move.w (a0)+,d5
  405.  
  406. .dothesimplething:
  407.  move.l FloorLines,a3
  408. .simplecheck:
  409.  move.w (a0)+,d5
  410.  blt nomoreliftwalls
  411.  asl.w #4,d5
  412.  lea (a3,d5.w),a4
  413.  move.w #0,14(a4)
  414.  move.l (a0)+,a1
  415.  add.l LEVELGRAPHICS,a1
  416.  move.l (a0)+,a2
  417.  adda.w d0,a2
  418.  move.l a2,10(a1)
  419.  move.l d3,20(a1)
  420.  bra.s .simplecheck
  421.  bra nomoreliftwalls 
  422.  
  423. .satisfied:
  424.  
  425.  move.l FloorLines,a3
  426.  moveq #0,d4
  427.  moveq #0,d5
  428.  move.b (a0)+,d4
  429.  move.b (a0)+,d5
  430.  tst.b liftattop
  431.  bne tstliftlower
  432.  tst.b liftatbot
  433.  bne tstliftraise
  434.  move.w #0,d1
  435.  
  436. backfromlift
  437.  
  438.  and.w #255,d0
  439.  
  440. liftwalls:
  441.  move.w (a0)+,d5
  442.  blt nomoreliftwalls
  443.  
  444.  asl.w #4,d5
  445.  lea (a3,d5.w),a4
  446.  move.w 14(a4),d4
  447.  move.w #$8000,14(a4)
  448.  and.w d1,d4
  449.  beq.s .nothinghit
  450.  move.w d7,(a5)
  451.  move.w #0,Noisex
  452.  move.w #0,Noisez
  453.  move.w #50,Noisevol
  454.  move.w #5,Samplenum
  455.  move.b #1,chanpick
  456.  st notifplaying
  457.  move.b #$fe,IDNUM
  458.  movem.l a0/a3/a4/d0/d1/d2/d3/d6/d7,-(a7)
  459.  jsr MakeSomeNoise
  460.  movem.l (a7)+,a0/a3/a4/d0/d1/d2/d3/d6/d7
  461. .nothinghit:
  462.  move.l (a0)+,a1
  463.  add.l LEVELGRAPHICS,a1
  464.  move.l (a0)+,a2
  465.  adda.w d0,a2
  466.  move.l a2,10(a1)
  467.  move.l d3,20(a1)
  468.  bra liftwalls
  469.  
  470. nomoreliftwalls 
  471.  bra doalift
  472.  
  473.  rts
  474.  
  475. tstliftlower:
  476.  cmp.b #1,d5
  477.  blt.s lift0
  478.  beq.s lift1
  479.  cmp.b #3,d5
  480.  blt.s lift2
  481.  beq.s lift3
  482.  
  483. lift0:
  484.  
  485.  moveq #0,d1
  486.  tst.b p1_spctap
  487.  beq.s .noplr1
  488.  move.w #%100000000,d1
  489.  move.w #4,d7
  490.  tst.b PLR1_stoodonlift
  491.  beq.s .noplr1
  492.  move.w #$8000,d1
  493.  bra backfromlift
  494.  
  495. .noplr1:
  496.  tst.b p2_spctap
  497.  beq.s .noplr2
  498.  or.w #%100000000000,d1
  499.  move.w #4,d7
  500.  tst.b PLR2_stoodonlift
  501.  beq.s .noplr2
  502.  move.w #$8000,d1
  503.  bra backfromlift
  504.  
  505. .noplr2:
  506.  bra backfromlift
  507.  
  508. lift1:
  509.  move.w #4,d7
  510.  tst.b PLR1_stoodonlift
  511.  bne.s lift1b
  512.  tst.b PLR2_stoodonlift
  513.  bne.s lift1b
  514.  move.w #%100100000000,d1
  515.  bra backfromlift
  516. lift1b:
  517.  move.w #$8000,d1
  518.  bra backfromlift
  519.  
  520. lift2:
  521.  move.w #$8000,d1
  522.  move.w #4,d7
  523.  bra backfromlift
  524.  
  525. lift3:
  526.  move.w #$0,d1
  527.  bra backfromlift
  528.  
  529. tstliftraise:
  530.  cmp.b #1,d4
  531.  blt.s rlift0
  532.  beq.s rlift1
  533.  cmp.b #3,d4
  534.  blt.s rlift2
  535.  beq.s rlift3
  536.  
  537. rlift0:
  538.  
  539.  moveq #0,d1
  540.  tst.b p1_spctap
  541.  beq.s .noplr1
  542.  move.w #%100000000,d1
  543.  move.w #-4,d7
  544.  tst.b PLR1_stoodonlift
  545.  beq.s .noplr1
  546.  move.w #$8000,d1
  547.  bra backfromlift
  548.  
  549. .noplr1:
  550.  tst.b p2_spctap
  551.  beq.s .noplr2
  552.  or.w #%100000000000,d1
  553.  move.w #-4,d7
  554.  tst.b PLR2_stoodonlift
  555.  beq.s .noplr2
  556.  move.w #$8000,d1
  557.  bra backfromlift
  558.  
  559. .noplr2:
  560.  
  561.  bra backfromlift
  562.  
  563. rlift1:
  564.  move.w #-4,d7
  565.  tst.b PLR1_stoodonlift
  566.  bne.s rlift1b
  567.  tst.b PLR2_stoodonlift
  568.  bne.s rlift1b
  569.  move.w #%100100000000,d1
  570.  bra backfromlift
  571. rlift1b:
  572.  move.w #$8000,d1
  573.  bra backfromlift
  574.  
  575. rlift2:
  576.  move.w #$8000,d1
  577.  move.w #-4,d7
  578.  bra backfromlift
  579.  
  580. rlift3:
  581.  move.w #$0,d1
  582.  bra backfromlift
  583.  
  584.  
  585. animtimer: dc.w 2
  586.  
  587.  
  588. doordir: dc.w -1
  589. doorpos: dc.w -9
  590. dooropen: dc.b 0
  591. doorclosed: dc.b 0 
  592.  
  593.  even 
  594. DoorRoutine:
  595.  
  596.  move.l #doorheighttab,a6
  597.  move.l DoorData,a0
  598.  
  599. doadoor:
  600.  
  601.  move.w (a0)+,d0    ; bottom of door movement
  602.  cmp.w #999,d0
  603.  bne notalldoorsdone
  604.  move.w #999,(a6)+
  605.  rts
  606. notalldoorsdone:
  607.  move.w (a0)+,d1    ; top of door movement.
  608.  
  609.  move.w (a0),d3
  610.  move.w d3,(a6)+
  611.  move.w 2(a0),d2
  612.  muls TempFrames,d2
  613.  add.w d2,d3
  614.  move.w 2(a0),d2
  615.  cmp.w d3,d0
  616.  sle.s doorclosed
  617.  bgt.s nolower
  618.  moveq #0,d2
  619. nolower:
  620.  
  621.  cmp.w d3,d1
  622.  sge.s dooropen
  623.  blt.s noraise
  624.  moveq #0,d2
  625.  move.w d1,d3
  626. noraise:
  627.  
  628.  sub.w d3,d0
  629.  cmp.w #15*16,d0
  630.  sge d6
  631.  
  632.  move.w d3,(a0)+
  633.  move.l a0,a5
  634.  move.w d2,(a0)+
  635.  move.w d2,d7
  636.  
  637.  move.l (a0)+,a1
  638.  add.l LEVELGRAPHICS,a1
  639.  asr.w #2,d3
  640.  move.w d3,d0
  641.  asl.w #2,d0
  642.  move.w d0,2(a1)
  643.  move.w d3,d0
  644.  muls #256,d3
  645.  move.l ZoneAdds,a1
  646.  move.w (a0)+,d5
  647.  
  648.  
  649.  move.l (a1,d5.w*4),a1
  650.  add.l LEVELDATA,a1
  651.  move.l d3,6(a1)
  652.  neg.w d0
  653.  and.w #255,d0
  654. ; add.w #64,d0
  655.  
  656.  cmp.w PLR1_Zone,d5
  657.  bne.s NotGoBackUp
  658.  tst.b dooropen
  659.  bne.s NotGoBackUp
  660.  tst.w d2
  661.  blt.s NotGoBackUp
  662.  move.w #-16,d7
  663.  move.w #$8000,d1
  664.  move.w (a0)+,d2
  665.  move.w (a0)+,d5
  666.  bra backfromtst
  667. NotGoBackUp:
  668.  
  669.  move.w (a0)+,d2    ; conditions
  670.  and.w Conditions,d2
  671.  
  672.  cmp.w -2(a0),d2
  673.  beq.s satisfied 
  674.  
  675.  move.w (a0)+,d5
  676.  
  677. dothesimplething:
  678.  move.l FloorLines,a3
  679. simplecheck:
  680.  move.w (a0)+,d5
  681.  blt nomoredoorwalls
  682.  asl.w #4,d5
  683.  lea (a3,d5.w),a4
  684.  move.w #0,14(a4)
  685.  move.l (a0)+,a1
  686.  add.l LEVELGRAPHICS,a1
  687.  move.l (a0)+,a2
  688.  adda.w d0,a2
  689.  move.l a2,10(a1)
  690.  move.l d3,24(a1)
  691.  bra.s simplecheck
  692.  bra nomoredoorwalls 
  693.  
  694.  
  695. satisfied:
  696.  
  697.  moveq #0,d4
  698.  moveq #0,d5
  699.  move.b (a0)+,d5
  700.  move.b (a0)+,d4
  701.  tst.b dooropen
  702.  bne tstdoortoclose
  703.  tst.b doorclosed
  704.  bne tstdoortoopen
  705.  move.w #$0,d1
  706.  
  707. backfromtst:
  708.  
  709.  move.l FloorLines,a3
  710.  
  711. doorwalls:
  712.  move.w (a0)+,d5
  713.  blt.s nomoredoorwalls
  714.  asl.w #4,d5
  715.  lea (a3,d5.w),a4
  716.  move.w 14(a4),d4
  717.  move.w #$8000,14(a4)
  718.  and.w d1,d4
  719.  beq.s nothinghit
  720.  move.w d7,(a5)
  721.  move.w #0,Noisex
  722.  move.w #0,Noisez
  723.  move.w #50,Noisevol
  724.  move.w #5,Samplenum
  725.  move.b #1,chanpick
  726.  clr.b notifplaying
  727.  move.b #$fd,IDNUM
  728.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  729.  jsr MakeSomeNoise
  730.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  731. nothinghit:
  732.  move.l (a0)+,a1
  733.  add.l LEVELGRAPHICS,a1
  734.  move.l (a0)+,a2
  735.  adda.w d0,a2
  736.  move.l a2,10(a1)
  737.  move.l d3,24(a1)
  738.  bra.s doorwalls
  739.  
  740. nomoredoorwalls 
  741.  bra doadoor
  742.  
  743.  rts
  744.  
  745. tstdoortoopen:
  746.  cmp.w #1,d5
  747.  blt.s door0
  748.  beq.s door1
  749.  cmp.w #3,d5
  750.  blt.s door2
  751.  beq.s door3
  752.  cmp.w #5,d5
  753.  blt.s door4
  754.  beq.s door5
  755.  
  756. door0:
  757.  
  758.  move.w #$0,d1
  759.  tst.b p1_spctap
  760.  beq.s .noplr1
  761.  move.w #%100000000,d1
  762. .noplr1:
  763.  tst.b p2_spctap
  764.  beq.s .noplr2
  765.  or.w #%100000000000,d1
  766. .noplr2:
  767.  move.w #-16,d7
  768.  bra backfromtst
  769.  
  770. door1:
  771.  move.w #%100100000000,d1
  772.  move.w #-16,d7
  773.  bra backfromtst
  774.  
  775. door2:
  776.  move.w #%10000000000,d1
  777.  move.w #-16,d7
  778.  bra backfromtst
  779.  
  780. door3:
  781.  move.w #%1000000000,d1
  782.  move.w #-16,d7
  783.  bra backfromtst
  784.  
  785. door4:
  786.  move.w #$8000,d1
  787.  move.w #-16,d7
  788.  bra backfromtst
  789.  
  790. door5:
  791.  move.w #$0,d1
  792.  bra backfromtst
  793.  
  794. tstdoortoclose:
  795.  tst.w d4
  796.  beq.s dclose0
  797.  bra.s dclose1
  798.  
  799. dclose0:
  800.  move.w #4,d7
  801.  move.w #$8000,d1
  802.  bra backfromtst
  803.  
  804. dclose1:
  805.  move.w #$0,d1
  806.  bra backfromtst
  807.  
  808. SwitchRoutine:
  809.  
  810.  move.l SwitchData,a0
  811.  move.w #7,d0
  812.  move.l Points,a1
  813. CheckSwitches
  814.  
  815.  tst.b p1_spctap
  816.  bne p1_SpaceIsPressed
  817. backtop2
  818.  tst.b p2_spctap
  819.  bne p2_SpaceIsPressed
  820. backtoend
  821.  
  822.  tst.b 2(a0)
  823.  beq nobutt
  824.  
  825.  tst.b 10(a0)
  826.  beq nobutt
  827.  
  828.  move.w TempFrames,d1
  829.  add.w d1,d1
  830.  add.w d1,d1
  831.  sub.b d1,3(a0)
  832.  bne nobutt
  833.  
  834.  move.b #0,10(a0)
  835.  move.l 6(a0),a3
  836.  add.l LEVELGRAPHICS,a3
  837.  move.w #11,4(a3)
  838.  move.w (a3),d3
  839.  and.w #%00000111100,d3
  840.  move.w d3,(a3)
  841.  move.w #7,d3
  842.  sub.w d0,d3
  843.  addq #4,d3
  844.  move.w Conditions,d4
  845.  bclr d3,d4
  846.  move.w d4,Conditions
  847.  move.w #0,Noisex
  848.  move.w #0,Noisez
  849.  move.w #50,Noisevol
  850.  move.w #10,Samplenum
  851.  move.b #1,chanpick
  852.  st notifplaying
  853.  move.b #$fc,IDNUM
  854.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  855.  jsr MakeSomeNoise
  856.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  857.  
  858. nobutt:
  859.  
  860.  adda.w #14,a0
  861.  dbra d0,CheckSwitches
  862.  rts
  863.  
  864. p1_SpaceIsPressed:
  865.  move.w p1_xoff,d1
  866.  move.w p1_zoff,d2
  867.  move.w (a0),d3
  868.  blt .NotCloseEnough
  869.  move.w 4(a0),d3
  870.  lea (a1,d3.w*4),a2
  871.  move.w (a2),d3
  872.  add.w 4(a2),d3
  873.  asr.w #1,d3
  874.  move.w 2(a2),d4
  875.  add.w 6(a2),d4
  876.  asr.w #1,d4
  877.  sub.w d1,d3
  878.  muls d3,d3
  879.  sub.w d2,d4
  880.  muls d4,d4
  881.  add.l d3,d4
  882.  cmp.l #60*60,d4
  883.  bge .NotCloseEnough
  884.  move.l 6(a0),a3
  885.  add.l LEVELGRAPHICS,a3
  886.  move.w #11,4(a3)
  887.  move.w (a3),d3
  888.  and.w #%00000111100,d3
  889.  not.b 10(a0)
  890.  beq.s .switchoff
  891.  or.w #2,d3
  892. .switchoff: 
  893.  move.w d3,(a3)
  894.  move.w #7,d3
  895.  sub.w d0,d3
  896.  addq #4,d3
  897.  move.w Conditions,d4
  898.  bchg d3,d4
  899.  move.w d4,Conditions
  900.  move.b #0,3(a0)
  901.  move.w #0,Noisex
  902.  move.w #0,Noisez
  903.  move.w #50,Noisevol
  904.  move.w #10,Samplenum
  905.  move.b #1,chanpick
  906.  st notifplaying
  907.  move.b #$fc,IDNUM
  908.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  909.  jsr MakeSomeNoise
  910.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  911.  
  912. .NotCloseEnough:
  913.  bra backtop2
  914.  
  915. p2_SpaceIsPressed:
  916.  move.w p2_xoff,d1
  917.  move.w p2_zoff,d2
  918.  move.w (a0),d3
  919.  blt .NotCloseEnough
  920.  move.w 4(a0),d3
  921.  lea (a1,d3.w*4),a2
  922.  move.w (a2),d3
  923.  add.w 4(a2),d3
  924.  asr.w #1,d3
  925.  move.w 2(a2),d4
  926.  add.w 6(a2),d4
  927.  asr.w #1,d4
  928.  sub.w d1,d3
  929.  muls d3,d3
  930.  sub.w d2,d4
  931.  muls d4,d4
  932.  add.l d3,d4
  933.  cmp.l #60*60,d4
  934.  bge .NotCloseEnough
  935.  move.l 6(a0),a3
  936.  add.l LEVELGRAPHICS,a3
  937.  move.w #11,4(a3)
  938.  move.w (a3),d3
  939.  and.w #%00000111100,d3
  940.  not.b 10(a0)
  941.  beq.s .switchoff
  942.  or.w #2,d3
  943. .switchoff: 
  944.  move.w d3,(a3)
  945.  move.w #7,d3
  946.  sub.w d0,d3
  947.  addq #4,d3
  948.  move.w Conditions,d4
  949.  bchg d3,d4
  950.  move.w d4,Conditions
  951.  movem.l a0/a1/d0,-(a7)
  952.  move.w #0,Noisex
  953.  move.w #0,Noisez
  954.  move.w #50,Noisevol
  955.  move.w #10,Samplenum
  956.  move.b #1,chanpick
  957.  st notifplaying
  958.  move.b #$fc,IDNUM
  959.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  960.  jsr MakeSomeNoise
  961.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  962.  
  963.  movem.l (a7)+,a0/a1/d0
  964.  
  965. .NotCloseEnough:
  966.  bra backtoend
  967.  
  968. prot1: dc.w 0
  969.   
  970. tempGotBigGun: dc.w 0 
  971. tempGunDamage: dc.w 0
  972. tempGunNoise: dc.w 1
  973. tempxoff: dc.w 0
  974. tempzoff: dc.w 0
  975. tempRoompt: dc.l 0
  976.  
  977. PLR1_GotBigGun: dc.w 0
  978. PLR1_GunDamage: dc.w 0
  979. PLR1_GunNoise: dc.w 0
  980. PLR2_GotBigGun: dc.w 0
  981. PLR2_GunDamage: dc.w 0
  982. PLR2_GunNoise: dc.w 0
  983. bulyspd: dc.w 0 
  984. closedist: dc.w 0
  985.  
  986. PLR1_ObsInLine:
  987.  ds.b 400 
  988. PLR2_ObsInLine:
  989.  ds.b 400 
  990.  
  991. rotcount:
  992.  dc.w 0
  993.  
  994. shotvels: ds.l 20
  995.  
  996.  include "PLAYERSHOOT.s"
  997.  
  998. PLR1_GunFrame: dc.w 0
  999. PLR2_GunFrame: dc.w 0
  1000.  
  1001. duh: dc.w 0
  1002. double: dc.w 0
  1003. ivescreamed: dc.w 0
  1004.  
  1005. ObjectHandler:
  1006.  
  1007.  move.l ObjectData,a0
  1008. Objectloop:
  1009.  tst.w (a0)
  1010.  blt doneallobj
  1011.  move.w 12(a0),GraphicRoom(a0)
  1012.  tst.b worry(a0)
  1013.  beq dontworryyourprettyhead
  1014.  
  1015.  move.b 16(a0),d0
  1016.  blt.s doneobj
  1017.  beq JUMPNASTY
  1018.  cmp.b #2,d0
  1019.  blt JUMPMEDI
  1020.  beq JUMPBULLET
  1021.  cmp.b #4,d0
  1022.  blt JUMPGUN
  1023.  beq JUMPKEY
  1024.  cmp.b #6,d0
  1025.  blt doneobj
  1026.  beq JUMPROBOT
  1027.  cmp.b #8,d0
  1028.  blt doneobj
  1029.  beq JUMPFLYINGNASTY
  1030.  cmp.b #10,d0
  1031.  blt JUMPAMMO
  1032.  beq JUMPBARREL
  1033.  cmp.b #12,d0
  1034.  blt doneobj
  1035.  beq JUMPMARINE
  1036.  cmp.b #14,d0
  1037.  blt JUMPWORM
  1038.  beq JUMPWELLHARD
  1039.  cmp.b #16,d0
  1040.  beq JUMPTREE
  1041.  cmp.b #18,d0
  1042.  blt JUMPEYEBALL
  1043.  beq JUMPTOUGHMARINE
  1044.  cmp.b #20,d0
  1045.  blt JUMPFLAMEMARINE
  1046.  beq JUMPGASPIPE
  1047.  
  1048. doneobj:
  1049.  
  1050. dontworryyourprettyhead:
  1051.  adda.w #64,a0
  1052.  bra Objectloop
  1053.  
  1054. doneallobj:
  1055.  rts
  1056.  
  1057. JUMPNASTY: 
  1058.  jsr ItsANasty
  1059.  bra doneobj
  1060. JUMPMEDI:
  1061.  jsr ItsAMediKit
  1062.  bra doneobj
  1063. JUMPBULLET
  1064.  jsr ItsABullet
  1065.  bra doneobj
  1066. JUMPGUN
  1067.  jsr ItsABigGun
  1068.  bra doneobj
  1069. JUMPKEY
  1070.  jsr ItsAKey
  1071.  bra doneobj
  1072.  
  1073. ; FIVE IS PLAYER 1
  1074. JUMPROBOT
  1075.  jsr ItsARobot
  1076.  bra doneobj
  1077.  
  1078.  jsr ItsABigNasty
  1079.  bra doneobj
  1080.  
  1081. JUMPFLYINGNASTY
  1082.  jsr ItsAFlyingNasty
  1083.  bra doneobj
  1084. JUMPAMMO
  1085.  jsr ItsAnAmmoClip
  1086.  bra doneobj
  1087. JUMPBARREL
  1088.  jsr ItsABarrel
  1089.  bra doneobj
  1090.  
  1091. ; ELEVEN IS PLAYER 2
  1092.  
  1093. JUMPMARINE
  1094.  jsr ItsAMutantMarine
  1095.  bra doneobj
  1096. JUMPWORM
  1097.  jsr ItsAHalfWorm
  1098.  bra doneobj
  1099. JUMPWELLHARD
  1100.  jsr ItsABigRedThing
  1101.  bra doneobj
  1102. JUMPTREE:
  1103.  jsr ItsATree
  1104.  bra doneobj
  1105. JUMPEYEBALL
  1106.  jsr ItsAEyeBall
  1107.  bra doneobj
  1108. JUMPTOUGHMARINE:
  1109.  jsr ItsAToughMarine
  1110.  bra doneobj
  1111. JUMPFLAMEMARINE:
  1112.  jsr ItsAFlameMarine
  1113.  bra doneobj
  1114. JUMPGASPIPE:
  1115.  jsr ItsAGasPipe
  1116.  bra doneobj
  1117.  
  1118.  
  1119. ItsAGasPipe:
  1120.  
  1121.  clr.b worry(a0)
  1122.  
  1123.  move.w TempFrames,d0
  1124.  tst.w ThirdTimer(a0)
  1125.  ble.s maybeflame
  1126.  
  1127.  sub.w d0,ThirdTimer(a0)
  1128.  move.w #5,SecTimer(a0)
  1129.  move.w #10,FourthTimer(a0)
  1130.  rts
  1131.  
  1132. maybeflame:
  1133.  
  1134.  sub.w d0,FourthTimer(a0)
  1135.  blt.s yesflame
  1136.  rts
  1137.  
  1138. yesflame:
  1139.  move.w #10,FourthTimer(a0)
  1140.  sub.w #1,SecTimer(a0)
  1141.  bgt.s notdoneflame
  1142.  
  1143.  move.w ObjTimer(a0),ThirdTimer(a0)
  1144.  
  1145. notdoneflame:
  1146.  
  1147.  cmp.w #4,SecTimer(a0)
  1148.  bne.s .nowhoosh
  1149.  
  1150.  movem.l d0-d7/a0-a6,-(a7)
  1151.  move.l #ObjRotated,a1
  1152.  move.w (a0),d0
  1153.  lea (a1,d0.w*8),a1
  1154.  move.l (a1),Noisex
  1155.  move.w #200,Noisevol
  1156.  move.w #22,Samplenum
  1157.  move.b #1,chanpick
  1158.  clr.b notifplaying
  1159.  move.b 1(a0),IDNUM
  1160.  jsr MakeSomeNoise
  1161.  movem.l (a7)+,d0-d7/a0-a6
  1162.  
  1163. .nowhoosh:
  1164.  
  1165. ; Gas pipe: facing direction is given by
  1166. ; leved (perpendicular to wall) so
  1167. ; just continuously spray out flame!
  1168.  move.l NastyShotData,a5
  1169.  move.w #19,d1
  1170. .findonefree
  1171.  move.w 12(a5),d0
  1172.  blt.s .foundonefree
  1173.  adda.w #64,a5
  1174.  dbra d1,.findonefree
  1175.  
  1176.  rts
  1177.  
  1178. .foundonefree:
  1179.  
  1180.  move.b #2,16(a5)
  1181.  move.w 12(a0),12(a5)
  1182.  move.w 4(a0),d0
  1183.  sub.w #80,d0
  1184.  move.w d0,4(a5)
  1185.  ext.l d0
  1186.  asl.l #7,d0
  1187.  move.l d0,accypos(a5)
  1188.  clr.b shotstatus(a5)
  1189.  move.w #0,shotyvel(a5)
  1190.  move.w (a0),d0
  1191.  move.w (a5),d1
  1192.  move.l ObjectPoints,a1
  1193.  move.l (a1,d0.w*8),(a1,d1.w*8)
  1194.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  1195.  move.b #3,shotsize(a5)
  1196.  move.w #0,shotflags(a5)
  1197.  move.w #0,shotgrav(a5)
  1198.  move.b #7,shotpower(a5)
  1199.  move.l #%100000100000,EnemyFlags(a5)
  1200.  move.w #0,shotanim(a5)
  1201.  move.w #0,shotlife(a5)
  1202.  move.l #SineTable,a1
  1203.  move.w Facing(a0),d0
  1204.  move.w (a1,d0.w),d1
  1205.  adda.w #2048,a1
  1206.  move.w (a1,d0.w),d2
  1207.  ext.l d1
  1208.  ext.l d2
  1209.  asl.l #4,d1
  1210.  asl.l #4,d2
  1211.  swap d1
  1212.  swap d2
  1213.  move.w d1,shotxvel(a5)
  1214.  move.w d2,shotzvel(a5)
  1215.  st worry(a5)
  1216.  
  1217.  rts
  1218.  
  1219. ; include "ab3:source/AI.s"
  1220.  
  1221. ItsABarrel:
  1222.  
  1223.  clr.b worry(a0)
  1224.  move.w 12(a0),GraphicRoom(a0)
  1225.  
  1226.  cmp.w #8,8(a0)
  1227.  bne.s notexploding
  1228.  
  1229.  add.w #$404,6(a0)
  1230.  
  1231.  move.w 10(a0),d0
  1232.  add.w #1,d0
  1233.  cmp.w #8,d0
  1234.  bne.s .notdone
  1235.  
  1236.  move.w #-1,12(a0)
  1237.  move.w #-1,GraphicRoom(a0)
  1238.  rts
  1239.  
  1240. .notdone:
  1241.  move.w d0,10(a0)
  1242.  rts
  1243.  
  1244. notexploding:
  1245.  
  1246.  move.w 12(a0),d0
  1247.  move.l ZoneAdds,a1
  1248.  move.l (a1,d0.w*4),a1
  1249.  add.l LEVELDATA,a1
  1250.  move.l ToZoneFloor(a1),d0
  1251.  tst.b ObjInTop(a0)
  1252.  beq.s .okinbot
  1253.  move.l ToUpperFloor(a1),d0
  1254. .okinbot:
  1255.  asr.l #7,d0
  1256.  sub.w #60,d0
  1257.  move.w d0,4(a0)
  1258.  
  1259.  moveq #0,d2
  1260.  move.b damagetaken(a0),d2
  1261.  beq.s nodamage
  1262.  move.b #0,damagetaken(a0)
  1263.  sub.b d2,numlives(a0)
  1264.  bgt.s nodamage
  1265.  move.b #0,numlives(a0)
  1266.  
  1267.  movem.l d0-d7/a0-a6,-(a7)
  1268.  
  1269.  move.w (a0),d0
  1270.  move.l ObjectPoints,a1
  1271.  move.w (a1,d0.w*8),Viewerx
  1272.  move.w 4(a1,d0.w*8),Viewerz
  1273.  move.w #40,d0
  1274.  jsr ComputeBlast
  1275.  
  1276.  move.w (a0),d0
  1277.  move.l #ObjRotated,a1
  1278.  move.l (a1,d0.w*8),Noisex
  1279.  move.w #300,Noisevol
  1280.  move.w #15,Samplenum
  1281.  jsr MakeSomeNoise
  1282.  
  1283.  movem.l (a7)+,d0-d7/a0-a6
  1284.  move.w #8,8(a0)
  1285.  move.w #0,10(a0)
  1286.  move.w #$2020,14(a0)
  1287.  move.w #-30,2(a0)
  1288.  
  1289.  rts
  1290.  
  1291. nodamage:
  1292.  
  1293.  move.w (a0),d0
  1294.  move.l ObjectPoints,a1
  1295.  move.w (a1,d0.w*8),Viewerx
  1296.  move.w 4(a1,d0.w*8),Viewerz
  1297.  move.b ObjInTop(a0),ViewerTop
  1298.  move.b PLR1_StoodInTop,TargetTop
  1299.  move.l PLR1_Roompt,ToRoom
  1300.  
  1301.  move.w 12(a0),d0
  1302.  move.l ZoneAdds,a1
  1303.  move.l (a1,d0.w*4),a1
  1304.  add.l LEVELDATA,a1
  1305.  move.l a1,FromRoom
  1306.   
  1307.  move.w PLR1_xoff,Targetx
  1308.  move.w PLR1_zoff,Targetz
  1309.  move.l PLR1_yoff,d0
  1310.  asr.l #7,d0
  1311.  move.w d0,Targety
  1312.  move.w 4(a0),Viewery
  1313.  jsr CanItBeSeen
  1314.  
  1315.  clr.b 17(a0)
  1316.  tst.b CanSee
  1317.  beq .noseeplr1
  1318.  move.b #1,17(a0)
  1319.  
  1320. .noseeplr1:
  1321.  
  1322.  move.b PLR2_StoodInTop,TargetTop
  1323.  move.l PLR2_Roompt,ToRoom
  1324.  move.w PLR2_xoff,Targetx
  1325.  move.w PLR2_zoff,Targetz
  1326.  move.l PLR2_yoff,d0
  1327.  asr.l #7,d0
  1328.  move.w d0,Targety
  1329.  move.w 4(a0),Viewery
  1330.  jsr CanItBeSeen
  1331.  
  1332.  tst.b CanSee
  1333.  beq .noseeplr2
  1334.  or.b #2,17(a0)
  1335.  
  1336. .noseeplr2:
  1337.  
  1338.  
  1339.  rts
  1340.  
  1341.  include "ab3:source/aliencontrol.s"
  1342.  
  1343. nextCPt: dc.w 0
  1344.  
  1345. RipTear: dc.l 256*17*65536
  1346. otherrip: dc.l 256*18*65536
  1347.  
  1348. ItsAMediKit:
  1349.  
  1350.  clr.b worry(a0)
  1351.  move.w 12(a0),GraphicRoom(a0)
  1352.  
  1353.  move.w 12(a0),d0
  1354.  move.l ZoneAdds,a1
  1355.  move.l (a1,d0.w*4),a1
  1356.  add.l LEVELDATA,a1
  1357.  move.l ToZoneFloor(a1),d0
  1358.  tst.b ObjInTop(a0)
  1359.  beq.s .okinbot
  1360.  move.l ToUpperFloor(a1),d0
  1361. .okinbot:
  1362.  asr.l #7,d0
  1363.  sub.w #32,d0
  1364.  move.w d0,4(a0)
  1365.  
  1366.  
  1367. HealFactor EQU 18
  1368.  
  1369.  
  1370.  cmp.w #127,PLR1_energy
  1371.  bge .NotSameZone
  1372.  
  1373.  move.b PLR1_StoodInTop,d0
  1374.  move.b ObjInTop(a0),d1
  1375.  eor.b d1,d0
  1376.  bne .NotSameZone
  1377.  
  1378.  move.w PLR1_xoff,oldx
  1379.  move.w PLR1_zoff,oldz
  1380.  move.w PLR1_Zone,d7
  1381.  
  1382.  cmp.w 12(a0),d7
  1383.  bne .NotSameZone
  1384.  move.w (a0),d0
  1385.  move.l ObjectPoints,a1
  1386.  move.w (a1,d0.w*8),newx
  1387.  move.w 4(a1,d0.w*8),newz
  1388.  move.l #100*100,d2
  1389.  jsr CheckHit
  1390.  tst.b hitwall
  1391.  beq .NotPickedUp
  1392.  
  1393.  move.l PLR1_Obj,a2
  1394.  move.w (a2),d0
  1395.  move.l #ObjRotated,a2
  1396.  move.l (a2,d0.w*8),Noisex
  1397.  move.w #50,Noisevol
  1398.  move.w #4,Samplenum
  1399.  move.b #2,chanpick
  1400.  clr.b notifplaying
  1401.  move.b 1(a0),IDNUM
  1402.  movem.l a0/a1/d2/d6/d7,-(a7)
  1403.  jsr MakeSomeNoise
  1404.  movem.l (a7)+,a0/a1/d2/d6/d7
  1405.  
  1406.  move.w #-1,12(a0)
  1407.  move.w #-1,GraphicRoom(a0)
  1408.  move.w HealFactor(a0),d0
  1409.  add.w PLR1_energy,d0
  1410.  cmp.w #127,d0
  1411.  ble.s .okokokokokok
  1412.  move.w #127,d0
  1413. .okokokokokok:
  1414.  move.w d0,PLR1_energy
  1415.  
  1416. .NotPickedUp:
  1417.  
  1418. .NotSameZone:
  1419.  
  1420. MEDIPLR2
  1421.  
  1422.  cmp.w #127,PLR2_energy
  1423.  bge .NotSameZone
  1424.  
  1425.  move.b PLR2_StoodInTop,d0
  1426.  move.b ObjInTop(a0),d1
  1427.  eor.b d1,d0
  1428.  bne .NotSameZone
  1429.  
  1430.  move.w PLR2_xoff,oldx
  1431.  move.w PLR2_zoff,oldz
  1432.  move.w PLR2_Zone,d7
  1433.  move.w 12(a0),d0
  1434.  
  1435.  cmp.w 12(a0),d7
  1436.  bne .NotSameZone
  1437.  move.w (a0),d0
  1438.  move.l ObjectPoints,a1
  1439.  move.w (a1,d0.w*8),newx
  1440.  move.w 4(a1,d0.w*8),newz
  1441.  move.l #100*100,d2
  1442.  jsr CheckHit
  1443.  tst.b hitwall
  1444.  beq .NotPickedUp
  1445.  
  1446.  move.l PLR2_Obj,a2
  1447.  move.w (a2),d0
  1448.  move.l #ObjRotated,a2
  1449.  move.l (a2,d0.w*8),Noisex
  1450.  move.w #50,Noisevol
  1451.  move.w #4,Samplenum
  1452.  move.b #2,chanpick
  1453.  clr.b notifplaying
  1454.  move.b 1(a0),IDNUM
  1455.  movem.l a0/a1/d2/d6/d7,-(a7)
  1456.  jsr MakeSomeNoise
  1457.  movem.l (a7)+,a0/a1/d2/d6/d7
  1458.  
  1459.  move.w #-1,12(a0)
  1460.  move.w #-1,GraphicRoom(a0)
  1461.  move.w HealFactor(a0),d0
  1462.  add.w PLR2_energy,d0
  1463.  cmp.w #127,d0
  1464.  ble.s .okokokokokok
  1465.  move.w #127,d0
  1466. .okokokokokok:
  1467.  move.w d0,PLR2_energy
  1468.  
  1469. .NotPickedUp:
  1470.  
  1471. .NotSameZone:
  1472.  
  1473.  
  1474.  rts
  1475.  
  1476. AMGR:
  1477.  dc.w 3,4,5,0,29,0,0,28
  1478.  
  1479. ItsAnAmmoClip:
  1480.  
  1481.  clr.b worry(a0)
  1482.  move.w 12(a0),GraphicRoom(a0)
  1483.  
  1484. AmmoType EQU 18
  1485.  move.w AmmoType(a0),d0
  1486.  move.w AMGR(pc,d0.w*2),10(a0)
  1487.  
  1488.  move.b PLR1_StoodInTop,d0
  1489.  move.b ObjInTop(a0),d1
  1490.  eor.b d1,d0
  1491.  bne .NotSameZone
  1492.  move.w PLR1_xoff,oldx
  1493.  move.w PLR1_zoff,oldz
  1494.  move.w PLR1_Zone,d7
  1495.  move.w 12(a0),d0
  1496.  move.l ZoneAdds,a1
  1497.  move.l (a1,d0.w*4),a1
  1498.  add.l LEVELDATA,a1
  1499.  move.l ToZoneFloor(a1),d0
  1500.  tst.b ObjInTop(a0)
  1501.  beq.s .okinbot
  1502.  move.l ToUpperFloor(a1),d0
  1503. .okinbot:
  1504.   asr.l #7,d0
  1505.  sub.w #32,d0
  1506.  move.w d0,4(a0)
  1507.  
  1508.  cmp.w 12(a0),d7
  1509.  bne .NotSameZone
  1510.  move.w (a0),d0
  1511.  move.l ObjectPoints,a1
  1512.  move.w (a1,d0.w*8),newx
  1513.  move.w 4(a1,d0.w*8),newz
  1514.  move.l #100*100,d2
  1515.  jsr CheckHit
  1516.  tst.b hitwall
  1517.  beq .NotPickedUp
  1518.  
  1519.  move.w AmmoType(a0),d0
  1520.  lea PLR1_GunData,a6
  1521.  lsl.w #2,d0
  1522.  lea (a6,d0.w*8),a6
  1523.  cmp.w #80*8,(a6)
  1524.  bge .NotPickedUp
  1525.  
  1526.  move.l PLR1_Obj,a2
  1527.  move.w (a2),d0
  1528.  move.l #ObjRotated,a2
  1529.  move.l (a2,d0.w*8),Noisex
  1530.  move.w #50,Noisevol
  1531.  move.w #11,Samplenum
  1532.  clr.b notifplaying
  1533.  move.b 1(a0),IDNUM
  1534.  movem.l a0/a1/d2/d6/d7,-(a7)
  1535.  jsr MakeSomeNoise
  1536.  movem.l (a7)+,a0/a1/d2/d6/d7
  1537.  
  1538.  move.w #-1,12(a0)
  1539.  move.w #-1,GraphicRoom(a0)
  1540.  move.w AmmoType(a0),d0
  1541.  lea PLR1_GunData,a6
  1542.  lsl.w #2,d0
  1543.  lea (a6,d0.w*8),a6
  1544.  moveq #0,d0
  1545.  move.b 4(a6),d0
  1546.  asl.w #3,d0
  1547.  move.w (a6),d1
  1548.  add.w d0,d1
  1549.  move.w d1,(a6)
  1550.  
  1551. .NotPickedUp:
  1552.  
  1553. .NotSameZone:
  1554.  
  1555. AMMOPLR2:
  1556.  
  1557.  move.b PLR2_StoodInTop,d0
  1558.  move.b ObjInTop(a0),d1
  1559.  eor.b d1,d0
  1560.  bne .NotSameZone
  1561.  move.w PLR2_xoff,oldx
  1562.  move.w PLR2_zoff,oldz
  1563.  move.w PLR2_Zone,d7
  1564.  move.w 12(a0),d0
  1565.  move.l ZoneAdds,a1
  1566.  move.l (a1,d0.w*4),a1
  1567.  add.l LEVELDATA,a1
  1568.  move.l ToZoneFloor(a1),d0
  1569.  tst.b ObjInTop(a0)
  1570.  beq.s .okinbot
  1571.  move.l ToUpperFloor(a1),d0
  1572. .okinbot:
  1573.   asr.l #7,d0
  1574.  sub.w #16,d0
  1575.  move.w d0,4(a0)
  1576.  
  1577.  cmp.w 12(a0),d7
  1578.  bne .NotSameZone
  1579.  move.w (a0),d0
  1580.  move.l ObjectPoints,a1
  1581.  move.w (a1,d0.w*8),newx
  1582.  move.w 4(a1,d0.w*8),newz
  1583.  move.l #100*100,d2
  1584.  jsr CheckHit
  1585.  tst.b hitwall
  1586.  beq .NotPickedUp
  1587.  
  1588.  move.w AmmoType(a0),d0
  1589.  lea PLR2_GunData,a6
  1590.  lsl.w #2,d0
  1591.  lea (a6,d0.w*8),a6
  1592.  cmp.w #80*8,(a6)
  1593.  bge .NotPickedUp
  1594.  
  1595.  
  1596.  move.l PLR2_Obj,a2
  1597.  move.w (a2),d0
  1598.  move.l #ObjRotated,a2
  1599.  move.l (a2,d0.w*8),Noisex
  1600.  move.w #50,Noisevol
  1601.  move.w #11,Samplenum
  1602.  clr.b notifplaying
  1603.  move.b 1(a0),IDNUM
  1604.  movem.l a0/a1/d2/d6/d7,-(a7)
  1605.  jsr MakeSomeNoise
  1606.  movem.l (a7)+,a0/a1/d2/d6/d7
  1607.  
  1608.  move.w #-1,12(a0)
  1609.  move.w #-1,GraphicRoom(a0)
  1610.  move.w AmmoType(a0),d0
  1611.  lea PLR2_GunData,a6
  1612.  lsl.w #2,d0
  1613.  lea (a6,d0.w*8),a6
  1614.  moveq #0,d0
  1615.  move.b 4(a6),d0
  1616.  asl.w #3,d0
  1617.  move.w (a6),d1
  1618.  add.w d0,d1
  1619.  move.w d1,(a6)
  1620.  
  1621. .NotPickedUp:
  1622.  
  1623. .NotSameZone:
  1624.  
  1625.  
  1626.  rts
  1627.  
  1628.  
  1629. ItsABigGun:
  1630.  move.w 12(a0),GraphicRoom(a0)
  1631.  
  1632.  clr.b worry(a0)
  1633.  
  1634.  move.b PLR1_StoodInTop,d0
  1635.  move.b ObjInTop(a0),d1
  1636.  eor.b d1,d0
  1637.  bne .NotSameZone
  1638.  move.w PLR1_xoff,oldx
  1639.  move.w PLR1_zoff,oldz
  1640.  move.w PLR1_Zone,d7
  1641.  move.w 12(a0),d0
  1642.  move.l ZoneAdds,a1
  1643.  move.l (a1,d0.w*4),a1
  1644.  add.l LEVELDATA,a1
  1645.  move.l ToZoneFloor(a1),d0
  1646.  tst.b ObjInTop(a0)
  1647.  beq.s .okinbot
  1648.  move.l ToUpperFloor(a1),d0
  1649. .okinbot:
  1650.   asr.l #7,d0
  1651. ; add.w #16,d0
  1652.  moveq #0,d1
  1653.  move.b 7(a0),d1
  1654.  sub.w d1,d0
  1655.  
  1656.  move.w d0,4(a0)
  1657.  cmp.w 12(a0),d7
  1658.  bne .NotSameZone
  1659.  move.w (a0),d0
  1660.  move.l ObjectPoints,a1
  1661.  move.w (a1,d0.w*8),newx
  1662.  move.w 4(a1,d0.w*8),newz
  1663.  move.l #100*100,d2
  1664.  jsr CheckHit
  1665.  tst.b hitwall
  1666.  beq .NotPickedUp
  1667.  
  1668.  move.l PLR1_Obj,a2
  1669.  move.w (a2),d0
  1670.  move.l #ObjRotated,a2
  1671.  move.l (a2,d0.w*8),Noisex
  1672.  move.w #50,Noisevol
  1673.  move.w #4,Samplenum
  1674.  move.b #2,chanpick
  1675.  clr.b notifplaying
  1676.  move.b 1(a0),IDNUM
  1677.  movem.l a0/a1/d2/d6/d7,-(a7)
  1678.  jsr MakeSomeNoise
  1679.  movem.l (a7)+,a0/a1/d2/d6/d7
  1680.  
  1681.  move.l #Cheese,FacesPtr
  1682.  move.w #4,Cheese
  1683.  move.w #-1,FacesCounter
  1684.  moveq #0,d0
  1685.  move.b 17(a0),d0
  1686.  move.l #PLR1_GunData+32,a1
  1687.  move.l #AmmoInGuns,a2
  1688.  move.w d0,d1
  1689.  lsl.w #2,d0
  1690.  st 7(a1,d0.w*8)
  1691.  move.w (a2,d1.w*2),d1
  1692.  add.w d1,(a1,d0.w*8)
  1693.  
  1694.  
  1695.  move.w #-1,12(a0)
  1696.  move.w #-1,GraphicRoom(a0)
  1697.  
  1698. .NotPickedUp:
  1699.  
  1700. .NotSameZone:
  1701.  
  1702. GUNPLR2:
  1703.  
  1704.  move.b PLR2_StoodInTop,d0
  1705.  move.b ObjInTop(a0),d1
  1706.  eor.b d1,d0
  1707.  bne .NotSameZone
  1708.  move.w PLR2_xoff,oldx
  1709.  move.w PLR2_zoff,oldz
  1710.  move.w PLR2_Zone,d7
  1711.  move.w 12(a0),d0
  1712.  move.l ZoneAdds,a1
  1713.  move.l (a1,d0.w*4),a1
  1714.  add.l LEVELDATA,a1
  1715.  move.l ToZoneFloor(a1),d0
  1716.  tst.b ObjInTop(a0)
  1717.  beq.s .okinbot
  1718.  move.l ToUpperFloor(a1),d0
  1719. .okinbot:
  1720.   asr.l #7,d0
  1721. ; add.w #16,d0
  1722.  moveq #0,d1
  1723.  move.b 7(a0),d1
  1724.  sub.w d1,d0
  1725.  
  1726.  move.w d0,4(a0)
  1727.  cmp.w 12(a0),d7
  1728.  bne .NotSameZone
  1729.  move.w (a0),d0
  1730.  move.l ObjectPoints,a1
  1731.  move.w (a1,d0.w*8),newx
  1732.  move.w 4(a1,d0.w*8),newz
  1733.  move.l #100*100,d2
  1734.  jsr CheckHit
  1735.  tst.b hitwall
  1736.  beq .NotPickedUp
  1737.  
  1738.  move.l PLR2_Obj,a2
  1739.  move.w (a2),d0
  1740.  move.l #ObjRotated,a2
  1741.  move.l (a2,d0.w*8),Noisex
  1742.  move.w #50,Noisevol
  1743.  move.w #4,Samplenum
  1744.  move.b #2,chanpick
  1745.  clr.b notifplaying
  1746.  move.b 1(a0),IDNUM
  1747.  movem.l a0/a1/d2/d6/d7,-(a7)
  1748.  jsr MakeSomeNoise
  1749.  movem.l (a7)+,a0/a1/d2/d6/d7
  1750.  
  1751.  move.l #Cheese,FacesPtr
  1752.  move.w #4,Cheese
  1753.  move.w #-1,FacesCounter
  1754.  moveq #0,d0
  1755.  move.b 17(a0),d0
  1756.  move.l #PLR2_GunData+32,a1
  1757.  move.l #AmmoInGuns,a2
  1758.  move.w d0,d1
  1759.  lsl.w #2,d0
  1760.  st 7(a1,d0.w*8)
  1761.  move.w (a2,d1.w*2),d1
  1762.  add.w d1,(a1,d0.w*8)
  1763.  
  1764.  
  1765.  move.w #-1,12(a0)
  1766.  move.w #-1,GraphicRoom(a0)
  1767.  
  1768. .NotPickedUp:
  1769.  
  1770. .NotSameZone:
  1771.  
  1772.  
  1773.  rts
  1774.  
  1775. AmmoInGuns:
  1776.  dc.w 0
  1777.  dc.w 5
  1778.  dc.w 1
  1779.  dc.w 0
  1780.  dc.w 1
  1781.  dc.w 0
  1782.  dc.w 0
  1783.  dc.w 5
  1784.  
  1785. ItsAKey:
  1786.  
  1787.  tst.b NASTY
  1788.  bne .yesnas
  1789.  move.w #-1,12(a0)
  1790.  rts
  1791. .yesnas:
  1792.  
  1793.  move.w 12(a0),GraphicRoom(a0)
  1794.  clr.b worry(a0)
  1795.  
  1796.  move.b PLR1_StoodInTop,d0
  1797.  move.b ObjInTop(a0),d1
  1798.  eor.b d1,d0
  1799.  bne .NotSameZone
  1800.  
  1801.  move.w PLR1_xoff,oldx
  1802.  move.w PLR1_zoff,oldz
  1803.  move.w PLR1_Zone,d7
  1804.  move.w 12(a0),d0
  1805.  move.l ZoneAdds,a1
  1806.  move.l (a1,d0.w*4),a1
  1807.  add.l LEVELDATA,a1
  1808.  move.l 2(a1),d0
  1809.  asr.l #7,d0
  1810.  sub.w #16,d0
  1811.  move.w d0,4(a0)
  1812.  cmp.w 12(a0),d7
  1813.  bne .NotSameZone
  1814.  move.w (a0),d0
  1815.  move.l ObjectPoints,a1
  1816.  move.w (a1,d0.w*8),newx
  1817.  move.w 4(a1,d0.w*8),newz
  1818.  move.l #100*100,d2
  1819.  jsr CheckHit
  1820.  tst.b hitwall
  1821.  beq .NotPickedUp
  1822.  
  1823.  move.w #0,Noisex
  1824.  move.w #0,Noisez
  1825.  move.w #50,Noisevol
  1826.  move.w #4,Samplenum
  1827.  move.b #2,chanpick
  1828.  clr.b notifplaying
  1829.  move.b 1(a0),IDNUM
  1830.  movem.l a0/a1/d2/d6/d7,-(a7)
  1831.  jsr MakeSomeNoise
  1832.  movem.l (a7)+,a0/a1/d2/d6/d7
  1833.  
  1834.  move.w #-1,12(a0)
  1835.  move.w #-1,GraphicRoom(a0)
  1836.  move.b 17(a0),d0
  1837.  or.b d0,Conditions+1
  1838.  
  1839.  move.l #PanelKeys,a1
  1840.  move.l Panel,a2
  1841.  add.l #40*8*11+22,a2
  1842.  
  1843.  moveq #0,d1
  1844.  lsr.b #1,d0
  1845.  bcs.s .done
  1846.  addq #1,d1
  1847.  lsr.b #1,d0
  1848.  bcs.s .done
  1849.  addq #1,d1
  1850.  lsr.b #1,d0
  1851.  bcs.s .done
  1852.  addq #1,d1 
  1853. .done
  1854.  
  1855.  muls #6*22*8,d1
  1856.  
  1857.  adda.w d1,a1
  1858.  
  1859.  move.w #22*8-1,d0    ;lines
  1860. .lines:
  1861.  
  1862.  move.l (a1)+,d1
  1863.  or.l d1,(a2)
  1864.  move.w (a1)+,d1
  1865.  or.w d1,4(a2)
  1866.  adda.w #40,a2
  1867.  
  1868.  dbra d0,.lines
  1869.  
  1870.  
  1871. .NotPickedUp:
  1872.  
  1873. .NotSameZone:
  1874.  
  1875.  rts
  1876.  
  1877. Conditions: dc.l 0
  1878.  
  1879. ; Format of animations:
  1880. ; Size (-1 = and of anim) (w)
  1881. ; Address of Frame. (l)
  1882. ; height offset (w)
  1883.  
  1884. Bul1Anim:
  1885.  dc.w 20*256+15
  1886.  dc.w 6,8
  1887.  dc.w 0
  1888.  dc.w 17*256+17
  1889.  dc.w 6,9
  1890.  dc.w 0
  1891.  dc.w 15*256+20
  1892.  dc.w 6,10
  1893.  dc.w 0
  1894.  dc.w 17*256+17
  1895.  dc.w 6,11
  1896.  dc.w 0
  1897.  dc.l -1
  1898.  
  1899. Bul1Pop
  1900.  dc.b 25,25
  1901.  dc.w 1,6
  1902.  dc.w 0
  1903.  dc.b 25,25
  1904.  dc.w 1,7
  1905.  dc.w -4
  1906.  dc.b 25,25
  1907.  dc.w 1,8
  1908.  dc.w -4
  1909.  dc.b 25,25
  1910.  dc.w 1,9
  1911.  dc.w -4
  1912.  dc.b 25,25
  1913.  dc.w 1,10
  1914.  dc.w -4
  1915.  dc.b 25,25
  1916.  dc.w 1,11
  1917.  dc.w -4
  1918.  dc.b 25,25
  1919.  dc.w 1,12
  1920.  dc.w -4
  1921.  dc.b 25,25
  1922.  dc.w 1,13
  1923.  dc.w -4
  1924.  dc.b 25,25
  1925.  dc.w 1,14
  1926.  dc.w -4
  1927.  dc.b 25,25
  1928.  dc.w 1,15
  1929.  dc.w -4
  1930.  dc.b 25,25
  1931.  dc.w 1,16
  1932.  dc.w -4
  1933.  dc.l -1
  1934.  
  1935. Bul3Anim:
  1936.  dc.b 25,25
  1937.  dc.w 0,12
  1938.  dc.w 0
  1939.  dc.b 25,25
  1940.  dc.w 0,13
  1941.  dc.w 0
  1942.  dc.b 25,25
  1943.  dc.w 0,14
  1944.  dc.w 0
  1945.  dc.b 25,25
  1946.  dc.w 0,15
  1947.  dc.w 0
  1948.  dc.l -1
  1949.  
  1950. Bul3Pop:
  1951.  dc.l -1
  1952.  
  1953. Bul4Anim:
  1954.  dc.b 25,25
  1955.  dc.w 6,4
  1956.  dc.w 0
  1957.  dc.b 25,25
  1958.  dc.w 6,5
  1959.  dc.w 0
  1960.  dc.b 25,25
  1961.  dc.w 6,6
  1962.  dc.w 0
  1963.  dc.b 25,25
  1964.  dc.w 6,7
  1965.  dc.w 0
  1966.  dc.l -1
  1967.  
  1968. Bul4Pop:
  1969.  dc.b 20,20
  1970.  dc.w 6,4
  1971.  dc.w 0
  1972.  dc.b 15,15
  1973.  dc.w 6,5
  1974.  dc.w 0
  1975.  dc.b 10,10
  1976.  dc.w 6,6
  1977.  dc.w 0
  1978.  dc.b 5,5
  1979.  dc.w 6,7
  1980.  dc.w 0
  1981.  dc.l -1
  1982.  
  1983. Bul5Anim:
  1984.  dc.b 10,10
  1985.  dc.w 6,4
  1986.  dc.w 0
  1987.  dc.b 10,10
  1988.  dc.w 6,5
  1989.  dc.w 0
  1990.  dc.b 10,10
  1991.  dc.w 6,6
  1992.  dc.w 0
  1993.  dc.b 10,10
  1994.  dc.w 6,7
  1995.  dc.w 0
  1996.  dc.l -1
  1997.  
  1998. Bul5Pop:
  1999.  dc.b 8,8
  2000.  dc.w 6,4
  2001.  dc.w 0
  2002.  dc.b 6,6
  2003.  dc.w 6,5
  2004.  dc.w 0
  2005.  dc.b 4,4
  2006.  dc.w 6,6
  2007.  dc.w 0
  2008.  dc.l -1
  2009.  
  2010. grenAnim:
  2011.  dc.b 25,25
  2012.  dc.w 1,21
  2013.  dc.w 0
  2014.  dc.b 25,25
  2015.  dc.w 1,22
  2016.  dc.w 0
  2017.  dc.b 25,25
  2018.  dc.w 1,23
  2019.  dc.w 0
  2020.  dc.b 25,25
  2021.  dc.w 1,24
  2022.  dc.w 0
  2023.  dc.l -1
  2024.  
  2025. Bul2Anim:
  2026.  dc.b 25,25
  2027.  dc.w 2,0
  2028.  dc.w 0
  2029.  dc.b 25,25
  2030.  dc.w 2,1
  2031.  dc.w 0
  2032.  dc.b 25,25
  2033.  dc.w 2,2
  2034.  dc.w 0
  2035.  dc.b 25,25
  2036.  dc.w 2,3
  2037.  dc.w 0
  2038.  dc.b 25,25
  2039.  dc.w 2,4
  2040.  dc.w 0
  2041.  dc.b 25,25
  2042.  dc.w 2,5
  2043.  dc.w 0
  2044.  dc.b 25,25
  2045.  dc.w 2,6
  2046.  dc.w 0
  2047.  dc.b 25,25
  2048.  dc.w 2,7
  2049.  dc.w 0
  2050.  dc.w -1
  2051.  
  2052.  
  2053. Bul2Pop:
  2054.  dc.b 25,25
  2055.  dc.w 2,8
  2056.  dc.w -4
  2057.  dc.b 29,29
  2058.  dc.w 2,9
  2059.  dc.w -4
  2060.  dc.b 33,33
  2061.  dc.w 2,10
  2062.  dc.w -4
  2063.  dc.b 37,37
  2064.  dc.w 2,11
  2065.  dc.w -4
  2066.  dc.b 41,41
  2067.  dc.w 2,12
  2068.  dc.w -4
  2069.  dc.b 45,45
  2070.  dc.w 2,13
  2071.  dc.w -4
  2072.  dc.b 49,49
  2073.  dc.w 2,14
  2074.  dc.w -4
  2075.  dc.b 53,53
  2076.  dc.w 2,15
  2077.  dc.w -4
  2078.  dc.b 57,57
  2079.  dc.w 2,16
  2080.  dc.w -4
  2081.  dc.b 61,61
  2082.  dc.w 2,17
  2083.  dc.w -4
  2084.  dc.b 65,65
  2085.  dc.w 2,18
  2086.  dc.w -4
  2087.  dc.b 69,69
  2088.  dc.w 2,19
  2089.  dc.w -4
  2090.  dc.w -1
  2091.  
  2092. RockAnim:
  2093.  dc.b 16,16
  2094.  dc.w 6,0
  2095.  dc.w 0
  2096.  dc.b 16,16
  2097.  dc.w 6,1
  2098.  dc.w 0
  2099.  dc.b 16,16
  2100.  dc.w 6,2
  2101.  dc.w 0
  2102.  dc.b 16,16
  2103.  dc.w 6,3
  2104.  dc.w 0  
  2105.  dc.l -1
  2106.  
  2107. val SET 100
  2108.  
  2109. RockPop:
  2110.  dc.b val,val
  2111.  dc.w 8,0
  2112.  dc.w -4
  2113. val SET val+10 
  2114.  dc.b val,val
  2115.  dc.w 8,1
  2116.  dc.w 0
  2117. val SET val+10 
  2118.  dc.b val,val
  2119.  dc.w 8,2
  2120.  dc.w -4
  2121. val SET val+10 
  2122.  dc.b val,val
  2123.  dc.w 8,3
  2124.  dc.w -4
  2125. val SET val+10 
  2126.  dc.b val,val
  2127.  dc.w 8,4
  2128.  dc.w -4
  2129. val SET val+10 
  2130.  dc.b val,val
  2131.  dc.w 8,4
  2132.  dc.w -4
  2133. val SET val+10 
  2134.  dc.b val,val
  2135.  dc.w 8,5
  2136.  dc.w -4
  2137. val SET val+10 
  2138.  dc.b val,val
  2139.  dc.w 8,5
  2140.  dc.w -4
  2141. val SET val+10 
  2142.  dc.b val,val
  2143.  dc.w 8,6
  2144.  dc.w -4
  2145. val SET val+10 
  2146.  dc.b val,val
  2147.  dc.w 8,6
  2148.  dc.w -4
  2149. val SET val+10 
  2150.  dc.b val,val
  2151.  dc.w 8,7
  2152.  dc.w -4
  2153. val SET val+10 
  2154.  dc.b val,val
  2155.  dc.w 8,7
  2156.  dc.w -4
  2157. val SET val+10 
  2158.  dc.b val,val
  2159.  dc.w 8,8
  2160.  dc.w -4
  2161. val SET val+10 
  2162.  dc.b val,val
  2163.  dc.w 8,8
  2164.  dc.w -4
  2165.  dc.l -1
  2166.  
  2167.  
  2168. val SET 5
  2169.  
  2170. FlameAnim:
  2171.  
  2172.  dc.b val,val
  2173.  dc.w 8,0
  2174.  dc.w 0
  2175. val SET val+4 
  2176.  dc.b val,val
  2177.  dc.w 8,1
  2178.  dc.w 0
  2179. val SET val+4 
  2180.  dc.b val,val
  2181.  dc.w 8,2
  2182.  dc.w 0
  2183. val SET val+4 
  2184.  dc.b val,val
  2185.  dc.w 8,3
  2186.  dc.w 0
  2187. val SET val+4 
  2188.  dc.b val,val
  2189.  dc.w 8,4
  2190.  dc.w 0
  2191. val SET val+4 
  2192.  dc.b val,val
  2193.  dc.w 8,4
  2194.  dc.w 0
  2195. val SET val+4 
  2196.  dc.b val,val
  2197.  dc.w 8,5
  2198.  dc.w 0
  2199. val SET val+4 
  2200.  dc.b val,val
  2201.  dc.w 8,5
  2202.  dc.w 0
  2203. val SET val+4 
  2204.  dc.b val,val
  2205.  dc.w 8,5
  2206.  dc.w 0
  2207. val SET val+4 
  2208.  dc.b val,val
  2209.  dc.w 8,6
  2210.  dc.w 0
  2211. val SET val+4 
  2212.  dc.b val,val
  2213.  dc.w 8,6
  2214.  dc.w 0
  2215. val SET val+4 
  2216.  dc.b val,val
  2217.  dc.w 8,6
  2218.  dc.w 0
  2219. val SET val+6 
  2220.  dc.b val,val
  2221.  dc.w 8,7
  2222.  dc.w 0
  2223. val SET val+8 
  2224.  dc.b val,val
  2225.  dc.w 8,7
  2226.  dc.w 0
  2227. val SET val+8 
  2228.  dc.b val,val
  2229.  dc.w 8,7
  2230.  dc.w 0
  2231. val SET val+8 
  2232.  dc.b val,val
  2233.  dc.w 8,7
  2234.  dc.w 0
  2235. val SET val+8 
  2236.  dc.b val,val
  2237.  dc.w 8,8
  2238.  dc.w 0
  2239. val SET val+8 
  2240.  dc.b val,val
  2241.  dc.w 8,8
  2242.  dc.w 0
  2243. val SET val+8 
  2244.  dc.b val,val
  2245.  dc.w 8,8
  2246.  dc.w 0
  2247.  
  2248.  dc.l -1
  2249.  
  2250. FlamePop:
  2251. val SET 4*35
  2252.  dc.b val,val
  2253.  dc.w 8,7
  2254.  dc.w 0
  2255. val SET val+4 
  2256.  dc.b val,val
  2257.  dc.w 8,7
  2258.  dc.w 0
  2259. val SET val+4 
  2260.  dc.b val,val
  2261.  dc.w 8,7
  2262.  dc.w 0
  2263. val SET val+4 
  2264.  dc.b val,val
  2265.  dc.w 8,8
  2266.  dc.w 0
  2267. val SET val+4 
  2268.  dc.b val,val
  2269.  dc.w 8,8
  2270.  dc.w 0
  2271. val SET val+4 
  2272.  dc.b val,val
  2273.  dc.w 8,8
  2274.  dc.w 0
  2275.  
  2276.  dc.l -1
  2277.  
  2278. Explode1Anim: 
  2279.  dc.b 25,25
  2280.  dc.w 0,16
  2281.  dc.w 0
  2282.  dc.b 25,25
  2283.  dc.w 0,17
  2284.  dc.w 0
  2285.  dc.b 25,25
  2286.  dc.w 0,18
  2287.  dc.w 0
  2288.  dc.b 25,25
  2289.  dc.w 0,19
  2290.  dc.w 0
  2291.  dc.l -1
  2292.  
  2293. Explode1Pop:
  2294.  dc.b 20,20
  2295.  dc.w 0,16
  2296.  dc.w 1
  2297.  dc.b 20,20
  2298.  dc.w 0,16
  2299.  dc.w 1
  2300.  dc.b 20,20
  2301.  dc.w 0,16
  2302.  dc.w 1
  2303.  dc.b 20,20
  2304.  dc.w 0,16
  2305.  dc.w 1
  2306.  dc.b 20,20
  2307.  dc.w 0,16
  2308.  dc.w 1
  2309.  dc.b 20,20
  2310.  dc.w 0,16
  2311.  dc.w 1
  2312.  dc.b 20,20
  2313.  dc.w 0,16
  2314.  dc.w 1
  2315.  dc.b 20,20
  2316.  dc.w 0,16
  2317.  dc.w 1
  2318.  
  2319.  dc.b 17,17
  2320.  dc.w 0,16
  2321.  dc.w 1
  2322.  
  2323.  dc.b 13,13
  2324.  dc.w 0,16
  2325.  dc.w 1
  2326.  
  2327.  dc.b 9,9
  2328.  dc.w 0,16
  2329.  dc.w 1
  2330.  
  2331.  dc.l -1
  2332.  
  2333. Explode2Anim: 
  2334.  dc.b 20,20
  2335.  dc.w 0,20
  2336.  dc.w 0
  2337.  dc.b 20,20
  2338.  dc.w 0,21
  2339.  dc.w 0
  2340.  dc.b 20,20
  2341.  dc.w 0,22
  2342.  dc.w 0
  2343.  dc.b 20,20
  2344.  dc.w 0,23
  2345.  dc.w 0
  2346.  dc.l -1
  2347.  
  2348. Explode2Pop:
  2349.  dc.b 20,20
  2350.  dc.w 0,20
  2351.  dc.w 1
  2352.  dc.b 20,20
  2353.  dc.w 0,20
  2354.  dc.w 1
  2355.  dc.b 20,20
  2356.  dc.w 0,20
  2357.  dc.w 1
  2358.  dc.b 20,20
  2359.  dc.w 0,20
  2360.  dc.w 1
  2361.  dc.b 20,20
  2362.  dc.w 0,20
  2363.  dc.w 1
  2364.  dc.b 20,20
  2365.  dc.w 0,20
  2366.  dc.w 1
  2367.  dc.b 20,20
  2368.  dc.w 0,20
  2369.  dc.w 1
  2370.  dc.b 20,20
  2371.  dc.w 0,20
  2372.  dc.w 1
  2373.  
  2374.  dc.b 17,17
  2375.  dc.w 0,20
  2376.  dc.w 1
  2377.  
  2378.  dc.b 13,13
  2379.  dc.w 0,20
  2380.  dc.w 1
  2381.  
  2382.  dc.b 9,9
  2383.  dc.w 0,20
  2384.  dc.w 1
  2385.  
  2386.  dc.l -1
  2387.  
  2388.  
  2389. Explode3Anim: 
  2390.  dc.b 20,20
  2391.  dc.w 0,24
  2392.  dc.w 0
  2393.  dc.b 20,20
  2394.  dc.w 0,25
  2395.  dc.w 0
  2396.  dc.b 20,20
  2397.  dc.w 0,26
  2398.  dc.w 0
  2399.  dc.b 20,20
  2400.  dc.w 0,27
  2401.  dc.w 0
  2402.  dc.l -1
  2403.  
  2404. Explode3Pop:
  2405.  
  2406.  dc.b 17,17
  2407.  dc.w 0,24
  2408.  dc.w 1
  2409.  dc.b 17,17
  2410.  dc.w 0,24
  2411.  dc.w 1
  2412.  dc.b 17,17
  2413.  dc.w 0,24
  2414.  dc.w 1
  2415.  dc.b 17,17
  2416.  dc.w 0,24
  2417.  dc.w 1
  2418.  dc.b 17,17
  2419.  dc.w 0,24
  2420.  dc.w 1
  2421.  dc.b 17,17
  2422.  dc.w 0,24
  2423.  dc.w 1
  2424.  dc.b 17,17
  2425.  dc.w 0,24
  2426.  dc.w 1
  2427.  dc.b 17,17
  2428.  dc.w 0,24
  2429.  dc.w 1
  2430.  
  2431.  dc.b 13,13
  2432.  dc.w 0,24
  2433.  dc.w 1
  2434.  
  2435.  dc.b 9,9
  2436.  dc.w 0,24
  2437.  dc.w 1
  2438.  
  2439.   dc.l -1
  2440.  
  2441. Explode4Anim: 
  2442.  dc.b 30,30
  2443.  dc.w 0,28
  2444.  dc.w 0
  2445.  dc.b 30,30
  2446.  dc.w 0,29
  2447.  dc.w 0
  2448.  dc.b 30,30
  2449.  dc.w 0,30
  2450.  dc.w 0
  2451.  dc.b 30,30
  2452.  dc.w 0,31
  2453.  dc.w 0
  2454.  dc.l -1
  2455.  
  2456. Explode4Pop:
  2457.  
  2458.  dc.b 20,20
  2459.  dc.w 0,28
  2460.  dc.w 0
  2461.  dc.b 20,20
  2462.  dc.w 0,28
  2463.  dc.w 1
  2464.  dc.b 20,20
  2465.  dc.w 0,28
  2466.  dc.w 1
  2467.  dc.b 20,20
  2468.  dc.w 0,28
  2469.  dc.w 1
  2470.  dc.b 20,20
  2471.  dc.w 0,28
  2472.  dc.w 1
  2473.  dc.b 20,20
  2474.  dc.w 0,28
  2475.  dc.w 1
  2476.  dc.b 20,20
  2477.  dc.w 0,28
  2478.  dc.w 1
  2479.  dc.b 20,20
  2480.  dc.w 0,28
  2481.  dc.w 1
  2482.  
  2483.  dc.b 17,17
  2484.  dc.w 0,28
  2485.  dc.w 1
  2486.  
  2487.  dc.b 13,13
  2488.  dc.w 0,28
  2489.  dc.w 1
  2490.  
  2491.  dc.b 9,9
  2492.  dc.w 0,28
  2493.  dc.w 1
  2494.  
  2495.  dc.l -1
  2496.   
  2497. BulletSizes:
  2498.  dc.w $1010,$808
  2499.  dc.w $1010,$1010
  2500.  dc.w $1010,$2020
  2501.  dc.w $2020,$2020
  2502.  dc.w $0808,$2020
  2503.  dc.w $1010,$1010
  2504.  dc.w $1010,$1010
  2505.  dc.w $808,$808
  2506.  dc.w 0,0,0,0
  2507. ;10 
  2508.  dc.w 0,0,0,0,0,0,0,0,0,0
  2509.  dc.w 0,0,0,0,0,0,0,0,0,0
  2510. ;20
  2511.  dc.w 0,0,0,0,0,0,0,0,0,0
  2512.  dc.w 0,0,0,0,0,0,0,0,0,0
  2513. ;30
  2514.  dc.w 0,0,0,0,0,0,0,0,0,0
  2515.  dc.w 0,0,0,0,0,0,0,0,0,0
  2516. ;40
  2517.  dc.w 0,0,0,0,0,0,0,0,0,0
  2518.  dc.w 0,0,0,0,0,0,0,0,0,0
  2519. ;50
  2520.  dc.w $0808,$0808,$0808,$0808
  2521.  dc.w $0808,$0808,$0808,$0808
  2522.  
  2523. HitNoises:
  2524.  dc.l -1,-1
  2525.  dc.w 15,200
  2526.  dc.l -1
  2527.  dc.w 15,200
  2528.  dc.l -1,-1,-1,-1,-1
  2529.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2530.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2531.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2532.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2533.  
  2534.  dc.w 13,50,13,50,13,50,13,50
  2535.  
  2536. ExplosiveForce:
  2537.  dc.w 0,0,64,0,40,0,0,0,0,0
  2538.  dc.w 0,0,0,0,0,0,0,0,0,0
  2539.  dc.w 0,0,0,0,0,0,0,0,0,0
  2540.  dc.w 0,0,0,0,0,0,0,0,0,0
  2541.  dc.w 0,0,0,0,0,0,0,0,0,0
  2542.  dc.w 0,0,0,0
  2543.   
  2544. BulletTypes:
  2545.  dc.l Bul1Anim,Bul1Pop
  2546.  dc.l Bul2Anim,Bul2Pop
  2547.  dc.l RockAnim,RockPop
  2548.  dc.l FlameAnim,FlamePop
  2549.  dc.l grenAnim,RockPop
  2550.  dc.l Bul4Anim,Bul4Pop
  2551.  dc.l Bul5Anim,Bul5Pop
  2552.  dc.l Bul1Anim,Bul1Pop
  2553.  dc.l 0,0
  2554.  dc.l 0,0
  2555.  
  2556.  dc.l 0,0
  2557.  dc.l 0,0
  2558.  dc.l 0,0
  2559.  dc.l 0,0
  2560.  dc.l 0,0
  2561.  dc.l 0,0
  2562.  dc.l 0,0
  2563.  dc.l 0,0
  2564.  dc.l 0,0
  2565.  dc.l 0,0
  2566.  
  2567.  dc.l 0,0
  2568.  dc.l 0,0
  2569.  dc.l 0,0
  2570.  dc.l 0,0
  2571.  dc.l 0,0
  2572.  dc.l 0,0
  2573.  dc.l 0,0
  2574.  dc.l 0,0
  2575.  dc.l 0,0
  2576.  dc.l 0,0
  2577.  
  2578.  dc.l 0,0
  2579.  dc.l 0,0
  2580.  dc.l 0,0
  2581.  dc.l 0,0
  2582.  dc.l 0,0
  2583.  dc.l 0,0
  2584.  dc.l 0,0
  2585.  dc.l 0,0
  2586.  dc.l 0,0
  2587.  dc.l 0,0
  2588.  
  2589.  dc.l 0,0
  2590.  dc.l 0,0
  2591.  dc.l 0,0
  2592.  dc.l 0,0
  2593.  dc.l 0,0
  2594.  dc.l 0,0
  2595.  dc.l 0,0
  2596.  dc.l 0,0
  2597.  dc.l 0,0
  2598.  dc.l 0,0
  2599.  
  2600.  dc.l Explode1Anim,Explode1Pop
  2601.  dc.l Explode2Anim,Explode2Pop
  2602.  dc.l Explode3Anim,Explode3Pop
  2603.  dc.l Explode4Anim,Explode4Pop
  2604.  
  2605. tsta: dc.l 0
  2606. timeout: dc.w 0
  2607.  
  2608. ItsABullet:
  2609.  
  2610.  move.b #0,timeout
  2611.  move.w 12(a0),d0
  2612.  move.w d0,GraphicRoom(a0)
  2613.  blt doneshot
  2614.  
  2615.  tst.b shotstatus(a0)
  2616.  bne.s noworrylife
  2617.  
  2618.  moveq #0,d1
  2619.  move.w shotlife(a0),d2
  2620.  blt.s infinite
  2621.  move.b shotsize(a0),d1
  2622.  move.l #PLR1_GunData,a1
  2623.  lsl.w #2,d1
  2624.  move.w 10(a1,d1.w*8),d1
  2625.  blt.s infinite
  2626.  
  2627.  cmp.w d2,d1
  2628.  bge.s notdone
  2629.  
  2630.  st timeout
  2631.  bra.s infinite 
  2632.  
  2633. notdone:
  2634.  
  2635.  move.w TempFrames,d2
  2636.  add.w d2,shotlife(a0)
  2637.  
  2638. infinite:
  2639.  
  2640. noworrylife:
  2641.  
  2642.  move.w #0,extlen
  2643.  move.b #$ff,awayfromwall
  2644.  
  2645.  moveq #0,d1
  2646.  move.b shotsize(a0),d1
  2647.  move.l #BulletTypes,a1
  2648.  lea (a1,d1.w*8),a1 
  2649.  
  2650.  tst.b shotstatus(a0)
  2651.  beq.s notpopping
  2652.  
  2653.  moveq #0,d1
  2654.  move.b shotsize(a0),d1
  2655.  move.l #BulletSizes,a2
  2656.  move.w 2(a2,d1.w*4),14(a0)
  2657.  
  2658.  moveq #0,d1
  2659.  move.b shotanim(a0),d1
  2660.  
  2661.  move.l 4(a1),a2
  2662.  move.w (a2,d1.w*8),d2
  2663.  cmp.w #-1,d2
  2664.  bne.s notdonepopping
  2665.  move.w #-1,12(a0)
  2666.  move.w #-1,GraphicRoom(a0)
  2667.  clr.b shotstatus(a0)
  2668.  move.b #0,shotanim(a0)
  2669.  rts
  2670. notdonepopping:
  2671.  
  2672.  add.b #1,shotanim(a0)
  2673.  move.w d2,6(a0)
  2674.  move.l 2(a2,d1.w*8),8(a0)
  2675.  move.w 6(a2,d1.w*8),d3
  2676.  add.w d3,4(a0)
  2677.  ext.l d3
  2678.  asl.l #7,d3
  2679.  add.l d3,accypos(a0)
  2680.  rts
  2681.  
  2682. notpopping:
  2683.  
  2684.  moveq #0,d1
  2685.  move.b shotsize(a0),d1
  2686.  move.l #BulletSizes,a2
  2687.  move.w (a2,d1.w*4),14(a0)
  2688.  
  2689.  moveq #0,d1
  2690.  move.b shotanim(a0),d1
  2691.  
  2692.  move.l (a1),a2
  2693.  add.b #1,shotanim(a0)
  2694.  move.w (a2,d1.w*8),d2
  2695.  bge.s notdoneanim
  2696.  
  2697.  move.b #0,shotanim(a0)
  2698.  move.w #0,d1
  2699.  
  2700. notdoneanim:
  2701.  
  2702.  move.w (a2,d1.w*8),6(a0)
  2703.  move.l 2(a2,d1.w*8),8(a0)
  2704.  move.w 6(a2,d1.w*8),d3
  2705.  ext.l d3
  2706.  asl.l #7,d3
  2707.  add.l d3,accypos(a0)
  2708.  
  2709.  move.l ZoneAdds,a2
  2710.  move.l (a2,d0.w*4),d0
  2711.  add.l LEVELDATA,d0
  2712.  move.l d0,objroom
  2713.  
  2714. ******************************** 
  2715.  move.l objroom,a3
  2716.  
  2717.  tst.b ObjInTop(a0)
  2718.  beq.s .notintop
  2719.  adda.w #8,a3
  2720. .notintop:
  2721.  
  2722.  move.l 6(a3),d0
  2723.  sub.l accypos(a0),d0
  2724.  cmp.l #10*128,d0
  2725.  blt .nohitroof 
  2726.  
  2727.  btst #0,shotflags+1(a0)
  2728.  beq.s .nobounce
  2729.  
  2730.  neg.w shotyvel(a0)
  2731.  
  2732.  move.l 6(a3),d0
  2733.  add.l #10*128,d0
  2734.  move.l d0,accypos(a0)
  2735.  
  2736.  btst #1,shotflags+1(a0)
  2737.  beq .nohitroof
  2738.  
  2739.  move.l shotxvel(a0),d0
  2740.  asr.l #1,d0
  2741.  move.l d0,shotxvel(a0)
  2742.  move.l shotzvel(a0),d0
  2743.  asr.l #1,d0
  2744.  move.l d0,shotzvel(a0) 
  2745.  
  2746.  bra .nohitroof
  2747.  
  2748. .nobounce: 
  2749.  
  2750.  move.b #0,shotanim(a0)
  2751.  move.b #1,shotstatus(a0)
  2752.  
  2753.  movem.l d0-d7/a0-a6,-(a7)
  2754.  move.l #HitNoises,a2
  2755.  moveq #0,d0
  2756.  move.b shotsize(a0),d0
  2757.  move.l (a2,d0.w*4),d0
  2758.  blt.s .nohitnoise
  2759.  
  2760.  move.l #ObjRotated,a1
  2761.  move.w (a0),d1
  2762.  move.l (a1,d1.w*8),Noisex
  2763.  move.w d0,Noisevol
  2764.  swap d0
  2765.  move.w d0,Samplenum
  2766.  move.b d1,IDNUM
  2767.  jsr MakeSomeNoise
  2768.  
  2769. .nohitnoise:
  2770.  
  2771.  moveq #0,d0
  2772.  move.l #ExplosiveForce,a2
  2773.  move.b shotsize(a0),d0
  2774.  move.w (a2,d0.w*2),d0
  2775.  beq.s .noexplosion
  2776.  
  2777.  move.w newx,Viewerx
  2778.  move.w newz,Viewerz
  2779.  
  2780.  move.w 4(a0),Viewery
  2781.  move.b ObjInTop(a0),ViewerTop
  2782.  
  2783.  bsr ComputeBlast
  2784.  
  2785. .noexplosion:
  2786.  
  2787.  movem.l (a7)+,d0-d7/a0-a6
  2788.  
  2789. .nohitroof:
  2790.  move.l 2(a3),d0
  2791.  sub.l accypos(a0),d0
  2792.  cmp.l #10*128,d0
  2793.  bgt .nohitfloor 
  2794.  
  2795.  btst #0,shotflags+1(a0)
  2796.  beq.s .nobounceup
  2797.  
  2798.  tst.w shotyvel(a0)
  2799.  blt .nohitfloor
  2800.  
  2801.  moveq #0,d0
  2802.  move.w shotyvel(a0),d0
  2803.  asr.w #1,d0
  2804.  neg.w d0
  2805.  move.w d0,shotyvel(a0)
  2806.  
  2807.  move.l 2(a3),d0
  2808.  sub.l #10*128,d0
  2809.  move.l d0,accypos(a0)
  2810.  
  2811.  btst #1,shotflags+1(a0)
  2812.  beq .nohitfloor
  2813.  
  2814.  move.l shotxvel(a0),d0
  2815.  asr.l #1,d0
  2816.  move.l d0,shotxvel(a0)
  2817.  move.l shotzvel(a0),d0
  2818.  asr.l #1,d0
  2819.  move.l d0,shotzvel(a0) 
  2820.  
  2821.  
  2822.  bra .nohitfloor
  2823. .nobounceup: 
  2824.  
  2825.  
  2826.  move.b #0,shotanim(a0)
  2827.  move.b #1,shotstatus(a0)
  2828.  movem.l d0-d7/a0-a6,-(a7)
  2829.  move.l #HitNoises,a2
  2830.  moveq #0,d0
  2831.  move.b shotsize(a0),d0
  2832.  move.l (a2,d0.w*4),d0
  2833.  blt.s .nohitnoise2
  2834.  
  2835.  move.l #ObjRotated,a1
  2836.  move.w (a0),d1
  2837.  move.l (a1,d1.w*8),Noisex
  2838.  move.w d0,Noisevol
  2839.  swap d0
  2840.  move.w d0,Samplenum
  2841.  move.b d1,IDNUM
  2842.  jsr MakeSomeNoise
  2843. .nohitnoise2:
  2844.  moveq #0,d0
  2845.  move.l #ExplosiveForce,a2
  2846.  move.b shotsize(a0),d0
  2847.  move.w (a2,d0.w*2),d0
  2848.  beq.s .noexplosion2
  2849.  
  2850.  move.w 4(a0),Viewery
  2851.  move.w newx,Viewerx
  2852.  move.w newz,Viewerz
  2853.  move.b ObjInTop(a0),ViewerTop
  2854.  bsr ComputeBlast
  2855.  
  2856. .noexplosion2:
  2857.  movem.l (a7)+,d0-d7/a0-a6
  2858. .nohitfloor:
  2859. ******************** 
  2860.  
  2861.  
  2862.  
  2863.  move.l ObjectPoints,a1
  2864.  move.w (a0),d1
  2865.  lea (a1,d1.w*8),a1
  2866.  move.l (a1),d2
  2867.  move.l d2,oldx
  2868.  move.l shotxvel(a0),d3
  2869.  move.w d3,d4
  2870.  swap d3
  2871.  move.w TempFrames,d5
  2872.  muls d5,d3
  2873.  mulu d5,d4
  2874.  swap d3
  2875.  clr.w d3
  2876.  add.l d4,d3
  2877.  add.l d3,d2
  2878.  move.l d2,newx
  2879.  move.l 4(a1),d2
  2880.  move.l d2,oldz
  2881.  move.l shotzvel(a0),d3
  2882.  move.w d3,d4
  2883.  swap d3
  2884.  muls d5,d3
  2885.  mulu d5,d4
  2886.  swap d3
  2887.  clr.w d3
  2888.  add.l d4,d3
  2889.  add.l d3,d2
  2890.  move.l d2,newz
  2891.  move.l accypos(a0),oldy 
  2892.  
  2893.  move.w shotyvel(a0),d3
  2894.  muls TempFrames,d3
  2895.  move.w shotgrav(a0),d5
  2896.  beq.s nograv
  2897.  muls TempFrames,d5
  2898.  add.l d5,d3
  2899.  move.w shotyvel(a0),d6
  2900.  ext.l d6
  2901.  add.l d5,d6
  2902.  cmp.l #10*256,d6
  2903.  blt.s okgrav
  2904.  move.l #10*256,d6
  2905.  okgrav:
  2906.  move.w d6,shotyvel(a0)
  2907. nograv:
  2908.  move.l accypos(a0),d4 
  2909.  add.l d3,d4
  2910.  
  2911.  move.l d4,accypos(a0)
  2912.  sub.l #5*128,d4
  2913.  move.l d4,newy
  2914.  add.l #5*128,d4
  2915.  asr.l #7,d4
  2916.  move.w d4,4(a0)
  2917.  btst #0,shotflags+1(a0)
  2918.  sne.s wallbounce
  2919.  seq.s exitfirst
  2920.  
  2921.  clr.b hitwall
  2922.  move.b ObjInTop(a0),StoodInTop
  2923.  move.w #%0000010000000000,wallflags
  2924.  move.l #0,StepUpVal
  2925.  move.l #$1000000,StepDownVal
  2926.  move.l #10*128,thingheight
  2927.  move.w oldx,d0
  2928.  cmp.w newx,d0
  2929.  bne.s lalal
  2930.  move.w oldz,d0
  2931.  cmp.w newz,d0
  2932.  beq.s nomovebul
  2933.  move.w #1,walllength
  2934.  
  2935. lalal:
  2936.  movem.l d0/d7/a0/a1/a2/a4/a5,-(a7)
  2937.  jsr MoveObject
  2938.  movem.l (a7)+,d0/d7/a0/a1/a2/a4/a5
  2939. nomovebul:
  2940.  move.b StoodInTop,ObjInTop(a0)
  2941.   
  2942.  tst.b wallbounce
  2943.  beq.s .notabouncything
  2944.  
  2945.  tst.b hitwall
  2946.  beq .nothitwall
  2947.  
  2948. ; we have hit a wall....
  2949.  
  2950.  move.w shotzvel(a0),d0
  2951.  muls wallxsize,d0
  2952.  move.w shotxvel(a0),d1
  2953.  muls wallzsize,d1
  2954.  sub.l d1,d0
  2955.  divs walllength,d0
  2956.  
  2957.  move.w shotxvel(a0),d1
  2958.  move.w wallzsize,d2
  2959.  add.w d2,d2
  2960.  muls d0,d2
  2961.  divs walllength,d2
  2962.  add.w d2,d1
  2963.  move.w d1,shotxvel(a0)
  2964.  
  2965.  move.w shotzvel(a0),d1
  2966.  move.w wallxsize,d2
  2967.  add.w d2,d2
  2968.  muls d0,d2
  2969.  divs walllength,d2
  2970.  sub.w d2,d1
  2971.  move.w d1,shotzvel(a0)
  2972.  
  2973.  btst #1,shotflags+1(a0)
  2974.  beq .nothitwall
  2975.  
  2976.  move.l shotxvel(a0),d0
  2977.  asr.l #1,d0
  2978.  move.l d0,shotxvel(a0)
  2979.  move.l shotzvel(a0),d0
  2980.  asr.l #1,d0
  2981.  move.l d0,shotzvel(a0) 
  2982.   
  2983.  
  2984.  bra .nothitwall
  2985.  
  2986. .notabouncything:
  2987.   
  2988.  tst.b hitwall
  2989.  beq .nothitwall
  2990.  
  2991.  move.l wallhitheight,d4
  2992.  move.l d4,accypos(a0)
  2993.  asr.l #7,d4
  2994.  move.w d4,4(a0)
  2995.  
  2996. .hitsomething
  2997.  clr.b timeout
  2998.  move.b #0,shotanim(a0)
  2999.  move.b #1,shotstatus(a0)
  3000.  
  3001.  movem.l d0-d7/a0-a6,-(a7)
  3002.  move.l #HitNoises,a2
  3003.  moveq #0,d0
  3004.  move.b shotsize(a0),d0
  3005.  move.l (a2,d0.w*4),d0
  3006.  blt.s .nohitnoise
  3007.  
  3008.  move.l #ObjRotated,a1
  3009.  move.w (a0),d1
  3010.  move.l (a1,d1.w*8),Noisex
  3011.  move.w d0,Noisevol
  3012.  swap d0
  3013.  move.w d0,Samplenum
  3014.  move.b d1,IDNUM
  3015.  jsr MakeSomeNoise
  3016.  
  3017. .nohitnoise:
  3018.  
  3019.  moveq #0,d0
  3020.  move.l #ExplosiveForce,a2
  3021.  move.b shotsize(a0),d0
  3022.  move.w (a2,d0.w*2),d0
  3023.  beq.s .noexplosion
  3024.  
  3025.  move.w newx,Viewerx
  3026.  move.w newz,Viewerz
  3027.  move.w 4(a0),Viewery
  3028.  move.b ObjInTop(a0),ViewerTop
  3029.  bsr ComputeBlast
  3030.  
  3031. .noexplosion:
  3032.  
  3033.  movem.l (a7)+,d0-d7/a0-a6
  3034.  
  3035. ; bra doneshot
  3036.  
  3037. ; rts
  3038.  
  3039. .nothitwall:
  3040.  
  3041.  tst.b timeout
  3042.  bne .hitsomething
  3043.  
  3044. lab:
  3045.  
  3046.  
  3047.  move.l objroom,a3
  3048.  move.w (a3),12(a0)
  3049.  move.w (a3),GraphicRoom(a0)
  3050.  move.l newx,(a1)
  3051.  move.l newz,4(a1)
  3052. ************ 
  3053. * Check if hit a nasty
  3054.  
  3055.  tst.l EnemyFlags(a0)
  3056.  bne.s notasplut
  3057.  rts
  3058. notasplut:
  3059.  
  3060.  move.l ObjectData,a3
  3061.  move.l ObjectPoints,a1
  3062.  move.w newx,d2
  3063.  sub.w oldx,d2
  3064.  move.w d2,xdiff
  3065.  move.w newz,d1
  3066.  sub.w oldz,d1
  3067.  move.w d1,zdiff
  3068.  move.w d1,d3
  3069.  move.w d2,d4
  3070.  muls d2,d2
  3071.  muls d1,d1
  3072.  move.l #1,d0
  3073.  add.l d1,d2
  3074.  beq .oksqr
  3075.  
  3076.  move.w #31,d0
  3077. .findhigh
  3078.  btst d0,d2
  3079.  bne .foundhigh
  3080.  dbra d0,.findhigh
  3081. .foundhigh
  3082.  asr.w #1,d0
  3083.  clr.l d3
  3084.  bset d0,d3
  3085.  move.l d3,d0
  3086.  
  3087.  move.w d0,d1
  3088.  muls d1,d1    ; x*x
  3089.  sub.l d2,d1    ; x*x-a
  3090.  asr.l #1,d1    ; (x*x-a)/2
  3091.  divs d0,d1    ; (x*x-a)/2x
  3092.  sub.w d1,d0    ; second approx
  3093.  bgt .stillnot0
  3094.  move.w #1,d0
  3095. .stillnot0
  3096.  
  3097.  move.w d0,d1
  3098.  muls d1,d1
  3099.  sub.l d2,d1
  3100.  asr.l #1,d1
  3101.  divs d0,d1
  3102.  sub.w d1,d0    ; second approx
  3103.  bgt .stillnot02
  3104.  move.w #1,d0
  3105. .stillnot02
  3106.  
  3107.  move.w d0,d1
  3108.  muls d1,d1
  3109.  sub.l d2,d1
  3110.  asr.l #1,d1
  3111.  divs d0,d1
  3112.  sub.w d1,d0    ; second approx
  3113.  bgt .stillnot03
  3114.  move.w #1,d0
  3115. .stillnot03
  3116.  
  3117. .oksqr
  3118.  move.w d0,Range
  3119.  add.w #40,d0
  3120.  muls d0,d0
  3121.  move.l d0,sqrnum
  3122.  
  3123. .checkloop:
  3124.  tst.w (a3)
  3125.  blt .checkedall
  3126.  tst.w 12(a3)
  3127.  blt .notanasty
  3128.  moveq #0,d1
  3129.  move.b 16(a3),d1
  3130.  move.l EnemyFlags(a0),d7
  3131.  btst d1,d7
  3132.  beq .notanasty
  3133.  tst.b numlives(a3)
  3134.  beq .notanasty
  3135.  
  3136.  move.l #ColBoxTable,a6
  3137.  lea (a6,d1.w*8),a6
  3138.  
  3139.  move.w 4(a3),d1
  3140.  move.w 4(a0),d2
  3141.  sub.w d1,d2
  3142.  bge .okh
  3143.  neg.w d2
  3144. .okh:
  3145.  
  3146.  cmp.w 2(a6),d2
  3147.  bgt .notanasty
  3148.  
  3149.  move.w (a3),d1
  3150.  move.w (a1,d1.w*8),d2
  3151.  move.w d2,d4
  3152.  move.w 4(a1,d1.w*8),d3
  3153.  move.w d3,d5
  3154.  sub.w newx,d4
  3155.  sub.w oldx,d2
  3156.  move.w d2,d6
  3157.  sub.w newz,d5
  3158.  sub.w oldz,d3
  3159.  move.w d3,d7
  3160.  muls zdiff,d6
  3161.  muls xdiff,d7
  3162.  sub.l d7,d6
  3163.  bgt.s .pos
  3164.  neg.l d6
  3165. .pos:
  3166.  divs Range,d6
  3167.  cmp.w (a6),d6
  3168.  bgt .stillgoing
  3169.  
  3170.  muls d2,d2
  3171.  muls d3,d3
  3172.  add.l d3,d2
  3173.  cmp.l sqrnum,d2
  3174.  bgt .stillgoing
  3175.  muls d4,d4
  3176.  muls d5,d5
  3177.  add.l d5,d4
  3178.  cmp.l sqrnum,d4
  3179.  bgt .stillgoing
  3180.  
  3181.  move.b shotpower(a0),d6
  3182.  add.b d6,damagetaken(a3)
  3183.  move.w shotxvel(a0),ImpactX(a3)
  3184.  move.w shotzvel(a0),ImpactZ(a3)
  3185.  move.b #0,shotanim(a0)
  3186.  move.b #1,shotstatus(a0)
  3187.  
  3188.  movem.l d0-d7/a0-a6,-(a7)
  3189.  move.l #HitNoises,a2
  3190.  moveq #0,d0
  3191.  move.b shotsize(a0),d0
  3192.  move.l (a2,d0.w*4),d0
  3193.  blt.s .nohitnoise3
  3194.  
  3195.  move.l #ObjRotated,a1
  3196.  move.w (a0),d1
  3197.  move.l (a1,d1.w*8),Noisex
  3198.  move.w d0,Noisevol
  3199.  swap d0
  3200.  move.w d0,Samplenum
  3201.  move.b d1,IDNUM
  3202.  jsr MakeSomeNoise
  3203. .nohitnoise3:
  3204.  moveq #0,d0
  3205.  move.l #ExplosiveForce,a2
  3206.  move.b shotsize(a0),d0
  3207.  move.w (a2,d0.w*2),d0
  3208.  beq.s .noexplosion3
  3209.  
  3210.  move.w 4(a0),Viewery
  3211.  move.w newx,Viewerx
  3212.  move.w newz,Viewerz
  3213.  bsr ComputeBlast
  3214.  
  3215. .noexplosion3:
  3216.  movem.l (a7)+,d0-d7/a0-a6
  3217.  
  3218.  
  3219.  bra .hitnasty
  3220. .stillgoing:
  3221. .notanasty:
  3222.  add.w #64,a3
  3223.  bra .checkloop
  3224. .hitnasty:
  3225. .checkedall
  3226.  
  3227. doneshot:
  3228.  
  3229.  rts
  3230.  
  3231. tmpnewx: dc.l 0
  3232. tmpnewz: dc.l 0
  3233. hithit: dc.l 0
  3234. sqrnum: dc.l 0
  3235. tmpangpos: dc.l 0
  3236. allbars: dc.l 0
  3237. backrout: ds.b 800
  3238. NUMTOCHECK: dc.w 0 
  3239.  
  3240. MAKEBACKROUT:
  3241.  move.l #backrout+256,d0
  3242.  clr.b d0
  3243.  move.l d0,allbars
  3244.  move.l d0,a1
  3245.  move.l #fromback,a0
  3246.  move.w #400,d0
  3247. putinback:
  3248.  move.b (a0)+,(a1)+
  3249.  dbra d0,putinback
  3250.  rts
  3251.  
  3252. putinbackdrop:
  3253.  
  3254.  move.l a0,-(a7)
  3255.  
  3256.  move.w tmpangpos,d5
  3257.  and.w #8191,d5
  3258.  muls #432,d5
  3259.  divs #8192,d5
  3260.  muls #38*2,d5
  3261.  
  3262.  CACHE_ON d1
  3263.  
  3264.  move.l frompt,a0
  3265.  adda.w #104*4,a0
  3266.  move.l #EndBackPicture,a3
  3267.  lea.l BackPicture,a1
  3268.  add.l d5,a1
  3269.  move.w #2,d4
  3270.  
  3271.  move.l allbars(pc),a2
  3272.  jmp (a2)
  3273.  
  3274. fromback:
  3275.  move.w #31,d3
  3276. onebar:
  3277. vertline:    
  3278. val SET 0
  3279.  
  3280.  REPT 19
  3281.  move.l (a1)+,d0
  3282.  move.w d0,val+104*4(a0)
  3283.  swap d0
  3284.  move.w d0,val(a0)
  3285. val SET val+104*8
  3286.  ENDR
  3287.  
  3288.  cmp.l a3,a1
  3289.  blt.s notoffrightend
  3290.  move.l #BackPicture,a1
  3291. notoffrightend:
  3292.  
  3293.  addq #4,a0
  3294.  dbra d3,onebar
  3295.  addq #4,a0
  3296.  dbra d4,fromback
  3297.  
  3298.  move.l (a7)+,a0
  3299.  rts
  3300.  
  3301. MaxDamage: dc.w 0
  3302.  
  3303. ComputeBlast:
  3304.  
  3305.  clr.w doneflames
  3306.  
  3307.  move.w d0,d6
  3308.  move.w d0,MaxDamage
  3309.  
  3310.  move.w d0,d1
  3311.  ext.l d6
  3312.  neg.w d1
  3313.  move.w 12(a0),d0
  3314.  jsr Flash
  3315.  
  3316.  move.l ZoneAdds,a2
  3317.  move.l (a2,d0.w*4),a2
  3318.  add.l LEVELDATA,a2
  3319.  move.l a2,MiddleRoom
  3320.  
  3321.  move.l ObjectData,a2
  3322.  suba.w #64,a2
  3323.  move.l #TESTAB,a6
  3324.  
  3325.  move.l a0,-(a7)
  3326.  
  3327. HitObjLoop:
  3328.  move.l MiddleRoom,FromRoom
  3329.  add.w #64,a2
  3330.  move.w (a2),d0
  3331.  blt CheckedEmAll
  3332.  tst.w 12(a2)
  3333.  blt.s HitObjLoop
  3334.  moveq #0,d1
  3335.  move.b 16(a2),d1
  3336.  move.l #%1111111111110111100001,d7    ; possible targets
  3337.  btst d1,d7
  3338.  beq.s HitObjLoop
  3339.  
  3340.  move.w 12(a2),d1
  3341.  move.l ZoneAdds,a3
  3342.  move.l (a3,d1.w*4),a3
  3343.  add.l LEVELDATA,a3
  3344.  move.l a3,ToRoom
  3345.  move.l ObjectPoints,a3
  3346.  move.w (a3,d0.w*8),Targetx
  3347.  move.w 4(a3,d0.w*8),Targetz
  3348.  move.w 4(a2),Targety
  3349.  move.b ObjInTop(a2),TargetTop
  3350.  jsr CanItBeSeen
  3351.  tst.b CanSee
  3352.  beq HitObjLoop
  3353.  
  3354.  move.w Targetx,d0
  3355.  sub.w Viewerx,d0
  3356.  move.w d0,d2
  3357.  move.w Targetz,d1
  3358.  sub.w Viewerz,d1
  3359.  move.w d1,d3
  3360.  muls d2,d2
  3361.  muls d3,d3
  3362.  add.l d3,d2 
  3363.  beq .oksqr
  3364.  move.w #31,d4
  3365. .findhigh
  3366.  btst d4,d2
  3367.  dbne d4,.findhigh
  3368. .foundhigh
  3369.  asr.w #1,d4
  3370.  clr.l d3
  3371.  bset d4,d3
  3372.  move.l d3,d4
  3373.  
  3374.  move.w d4,d3
  3375.  muls d3,d3    ; x*x
  3376.  sub.l d2,d3    ; x*x-a
  3377.  asr.l #1,d3    ; (x*x-a)/2
  3378.  divs d4,d3    ; (x*x-a)/2x
  3379.  sub.w d3,d4    ; second approx
  3380.  bgt .stillnot0
  3381.  move.w #1,d4
  3382. .stillnot0
  3383.  
  3384.  move.w d4,d3
  3385.  muls d1,d3
  3386.  sub.l d2,d3
  3387.  asr.l #1,d3
  3388.  divs d4,d3
  3389.  sub.w d3,d4    ; second approx
  3390.  bgt .stillnot02
  3391.  move.w #1,d4
  3392. .stillnot02
  3393.  
  3394.  move.w d4,d3
  3395.  muls d3,d3
  3396.  sub.l d2,d3
  3397.  asr.l #1,d3
  3398.  divs d4,d3
  3399.  sub.w d3,d4    ; second approx
  3400.  bgt .stillnot03
  3401.  move.w #1,d4
  3402. .stillnot03
  3403.  
  3404. .oksqr
  3405.  
  3406.  
  3407.  move.w d4,d3
  3408.  asr.w #3,d3
  3409.  
  3410.  sub.w #4,d3
  3411.  bge.s OkItsnotzero
  3412.  moveq #0,d3
  3413. OkItsnotzero:
  3414.  
  3415.  cmp.w #31,d3
  3416.  bgt HitObjLoop
  3417.  neg.w d3
  3418.  add.w 32,d3
  3419.  
  3420.  move.w d6,d5
  3421.  muls d3,d5
  3422.  asr.l #5,d5
  3423.  cmp.w MaxDamage,d5
  3424.  blt.s okdamage
  3425.  move.w MaxDamage,d5
  3426. okdamage:
  3427.  add.b d5,damagetaken(a2)
  3428.  ext.l d0
  3429.  ext.l d1
  3430.  asl.l #4,d0
  3431.  asl.l #4,d1
  3432.  divs d3,d0
  3433.  divs d3,d1
  3434.  move.w d0,ImpactX(a2)
  3435.  move.w d1,ImpactZ(a2)
  3436.  
  3437.  bra HitObjLoop 
  3438.  
  3439. CheckedEmAll:
  3440.  
  3441. ; Now put in the flames!
  3442.  move.l (a7)+,a0
  3443.  
  3444.  move.w (a0),d0
  3445.  move.l ObjectPoints,a2
  3446.  move.w (a2,d0.w*8),d1
  3447.  move.w 4(a2,d0.w*8),d2
  3448.  
  3449.  move.w d1,middlex
  3450.  move.w d2,middlez
  3451.  
  3452.  move.w #9,d7
  3453.  
  3454.  clr.b exitfirst
  3455.  clr.b wallbounce
  3456.  move.w 12(a0),d0
  3457.  move.l ZoneAdds,a3
  3458.  move.l (a3,d0.w*4),a3
  3459.  add.l LEVELDATA,a3
  3460.  move.l a3,MiddleRoom
  3461.  
  3462.  move.l PlayerShotData,a3
  3463.  move.w 4(a0),d0
  3464.  ext.l d0
  3465.  asl.l #7,d0
  3466.  move.l d0,oldy
  3467.  
  3468.  moveq #2,d5
  3469.  move.w #19,NUMTOCHECK
  3470.  
  3471.  move.w #3,d6
  3472. radiusloop:
  3473.  move.w #2,d7
  3474.  
  3475. DOFLAMES:
  3476.  
  3477.  move.w NUMTOCHECK,d1
  3478. .findonefree
  3479.  move.w 12(a3),d2
  3480.  blt.s .foundonefree
  3481.  adda.w #64,a3
  3482.  dbra d1,.findonefree
  3483.  rts
  3484. .foundonefree
  3485.  
  3486.  move.w d1,NUMTOCHECK
  3487.  
  3488.  add.w #1,doneflames
  3489.  move.w middlex,d1
  3490.  move.w middlez,d2
  3491.  move.w d1,oldx
  3492.  move.w d2,oldz
  3493.  move.b ObjInTop(a0),StoodInTop
  3494.  
  3495.  jsr GetRand
  3496.  ext.w d0
  3497.  muls d5,d0
  3498.  asr.w #1,d0
  3499.  bne.s .xnz
  3500.  moveq #2,d0
  3501. .xnz:
  3502.  add.w d0,d1
  3503.  jsr GetRand
  3504.  ext.w d0
  3505.  muls d5,d0
  3506.  asr.w #1,d0
  3507.  bne.s .znz
  3508.  moveq #2,d0
  3509. .znz: 
  3510.  add.w d0,d2
  3511.  move.l oldy,d3
  3512.  jsr GetRand
  3513.  muls d5,d0
  3514.  asr.l #3,d0
  3515.  add.l d0,d3
  3516.  move.l d3,newy
  3517.  
  3518.  move.w d1,newx
  3519.  move.w d2,newz
  3520.  move.l MiddleRoom,objroom
  3521.  
  3522.  
  3523.  movem.l d5/d6/a0/a1/a3/d7/a6,-(a7)
  3524.  move.w #80,extlen
  3525.  move.b #1,awayfromwall
  3526.  jsr MoveObject
  3527.  movem.l (a7)+,d5/d6/a0/a1/a3/d7/a6
  3528.  
  3529.  move.l objroom,a2
  3530.  move.w (a2),12(a3)
  3531.  
  3532.  move.l newy,d0
  3533.  
  3534.  move.l ToZoneFloor(a2),d1
  3535.  move.l ToZoneRoof(a2),d2
  3536.  tst.b ObjInTop(a0)
  3537.  beq.s .okinbot
  3538.  move.l ToUpperFloor(a2),d1
  3539.  move.l ToUpperRoof(a2),d2
  3540. .okinbot:
  3541.  
  3542.  cmp.l d0,d1
  3543.  bgt.s .abovefloor
  3544.  move.l d1,d0
  3545. .abovefloor: 
  3546.  
  3547.  cmp.l d0,d2
  3548.  blt.s .belowroof
  3549.  move.l d2,d0
  3550. .belowroof:
  3551.  
  3552.  move.l d0,accypos(a3)
  3553.  asr.l #7,d0
  3554.  move.w d0,4(a3)
  3555.  move.b #2,16(a3)
  3556.  move.b #5,shotanim(a3)
  3557.  sub.b d5,shotanim(a3)
  3558.  st shotstatus(a3)
  3559.  move.b StoodInTop,ObjInTop(a3)
  3560.  move.b #2,shotsize(a3)
  3561.  st worry(a3)
  3562.  move.w (a3),d0
  3563.  move.l ObjectPoints,a2
  3564.  move.w newx,(a2,d0.w*8)
  3565.  move.w newz,4(a2,d0.w*8)
  3566.  
  3567.  adda.w #64,a3
  3568.  
  3569.  dbra d7,DOFLAMES
  3570.  add.w #1,d5
  3571.  dbra d6,radiusloop
  3572.  
  3573.  rts
  3574.  
  3575. MiddleRoom: dc.l 0
  3576. middlex: dc.w 0
  3577. middlez: dc.w 0
  3578. doneflames: dc.w 0
  3579.  
  3580. TESTAB: ds.l 200